2012-05-17 5 views
1

SVG 문자열이 있는데 두 속성 (폭과 높이)을 추출해야합니다.Javascript regex. SVG 문자열에서 값을 추출해야합니다.

내가 XML을 파서로 사용할 수없는 이유는 어디서나 DOM이 없기 때문입니다. 이 같은

SVG의 외모 :

<svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" version="1.1" width="768" height="1005" space="preserve"> 
    LOT OF DATA HERE... <></> etc 
</svg> 

I는 다음과 같이 시작 :

var width = svgString.match(/^<svg.\width.=.(.*)$>/gm); 

그것은 오전 4시 그리고 내 머리는 작동하지 않습니다. 누군가 도움이된다면 도움이 될 것입니다. 고마워.

답변

2

이 jmar777의 코드가 작동하는 가정하면, 선택적 공백, 선택적 따옴표를 허용하고 svg 태그 자체에서 값을 확인하는 다른 보수적 인 regex를 사용합니다 (svg 태그에없는 경우 다른 태그가 아닌). 이것은 당신이 그 svg를 얻는 방법과 그들이 형성되는 방법에 따라 당신의 경우에 차이를 줄 수도 있고 그렇지 않을 수도 있습니다.

var width = svgString.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1]; 
var height = svgString.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1]; 
+0

Thx, 너의 솔루션을 사용했다. 일부 SVG에 작은 따옴표가 있으면 '\ "'또는'\''를 검색하기 위해 조금 수정합니다. 처음에는 SVG의 doctype 태그가있는 것을 보았으므로 처음부터'^'을 제거했습니다. – vale4674

1
var width = svgString.match(/^<svg.*?width="(\d+)/)[1]; 
var height = svgString.match(/^<svg.*?height="(\d+)/)[1]; 
+0

Tnx. 나는 공백을 돌보는 유진 (Eugene)의 솔루션을 사용했다. 당신의 대답은 좋은 출발점이었습니다. 그래서 나는 당신의 대답을 투표 할 것입니다. – vale4674

0

선택적 부품은 선택 사양으로 지정해야합니다. (참조 : 정규식의 '폭'과 = 기호 사이의 점)

var width = svgString.match(/^<svg.*width\s*=\s*\"(\d*)\"$>/gm); 

(\의 일치 모든 공백과 \ d는 모든 숫자와 일치하는지 주어진)

+0

당신은 바로 \ s을 의미합니까? – akonsu

+0

아! 기억이 안나요. 픽스를 – Riking