2010-08-04 3 views
7

Дан:Javascript - получить только переменная часть регулярных выражений матча

var regexp = new RegExp("<~~include(.*?)~~>", "g"); 

Что лёгкий способ в JavaScript, чтобы присвоить переменное что бы ни Немаловажно *.?

Я могу это сделать, но это немного некрасиво:

myString.match(regexp).replace("<~~include", "").replace("~~>", ""); 

ответ

6

Javascript sh ould возвращает объект массива в соответствие регулярному выражению, где нулевой индекс массива представляет собой всю строку, которая была сопоставлена, и следующие индексы являются группами захвата. В вашем случае что-то вроде:

var myVar = regexp.exec(myString)[1];

следует присвоить значение группы (.*?) захвата к myVar.

+1

Не будет ли это ошибка, если нет совпадения? Он возвращает null, если нет совпадений, поэтому попытка получить доступ к индексу массива нулевого объекта вызовет ошибку. –

6

(Цитаты из MDC)

Включая скобок в шаблоне регулярного выражения вызывает соответствующий submatch будет запоминающимся. Например, /a(b)c/ соответствует символам 'abc' и запоминает 'b'.

Поскольку .*? является первым (и только) вспомнил матч, используйте $1 в вашей строке замены:

var foo = myString.replace(regexp, '$1'); 

Edit: По вашему комментарию, вы можете также (возможно, с более четкое намерение) сделать это:

var foo = regexp.exec(myString)[1]; 
+0

Благодарности медведей. Дело в том, что я фактически не хочу заменять все это, я просто хочу узнать, что это за значение. *? является. – morgancodes

+0

[Nick] (http://stackoverflow.com/users/21399/nick) только что прокомментировал (а затем удалил свой комментарий), что первая версия также будет работать. Он прав, но я предполагаю, что намерение версии «replace» менее очевидно, чем намерение версии «exec». В любом случае вам нужно присвоить значение, возвращенное 'replace' /' exec', другой переменной. –

0

Вы можете использовать lookahead для части этого регулярного выражения. Смотрите здесь:

Regular expression for extracting a number

и/или здесь:

http://www.regular-expressions.info/lookaround.html

+0

Lookaround - не ответ. Как это должно помочь? –

+0

[quote] Спасибо, медведи. Дело в том, что я фактически не хочу заменять все это, я просто хочу узнать, что это за значение. *? является. - morgancodes 15 мин. Назад – Skyler

+0

Чтобы они могли написать регулярное выражение, которое [EDIT] соответствует <~~ include (. *?) ~~> и исключает информацию, которую они не хотят. – Skyler

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