2012-05-17 2 views
1

У меня есть строка SVG, и мне нужно извлечь два атрибута: ширину и высоту.Javascript regex. Нужно извлечь значение из строки SVG

Я не могу использовать некоторый синтаксический анализатор XML, так как я использую его с базой Titanium Studio, поэтому у меня нет 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> 

я начал что-то вроде этого:

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

Это 4 АМ и мой мозг просто не работает. Если кто-то может помочь, это будет здорово! Спасибо.

ответ

2

Если предположить, что код jmar777 работает, Я бы использовал другое, более консервативное, регулярное выражение, которое допускает дополнительные пробелы, необязательные кавычки и подтверждает, что значения из самого тега svg (а не из какого-либо другого тега, если отсутствует в svg-теге). Это может или не может иметь значения в вашем случае, в зависимости от того, где вы получаете эти svgs и как они формируются.

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. Я использовал решение Юджина, которое также заботится о белых пространствах. Твоя была хорошей отправной точкой, поэтому я проголосую за ваш ответ – vale4674

0

Обязательно сделайте дополнительные детали дополнительно. (См: многоточие в между «шириной» и знаком = в своем регулярном выражении)

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

(учитывая, что \ S соответствует всем пробельному и \ d соответствует всем номерам)

+0

ты имеешь в виду \ s, верно? – akonsu

+0

Ах! не мог вспомнить. Исправлено: – Riking

Смежные вопросы