Javascript - получить только переменную часть соответствия регулярному выражению - PullRequest
8 голосов
/ 05 августа 2010

Дано:

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

Какой самый простой способ в javascript - присвоить переменную тому, с чем сопоставляется. *?

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

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

Ответы [ 3 ]

7 голосов
/ 05 августа 2010

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

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

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

6 голосов
/ 05 августа 2010

(цитаты из MDC )

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

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

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

Редактировать: Согласно вашему комментарию, вы также можете (возможно, с более ясным намерением) сделать это:

var foo = regexp.exec(myString)[1];
0 голосов
/ 05 августа 2010

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

Регулярное выражение для извлечения числа

и / или здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...