2016-11-03 4 views
0

Я пытаюсь извлечь переменные из файла исходного кода предварительного процессора css, используя регулярное выражение, но мой вопрос можно задать в более общем плане.Regex не включает совпадение после захваченной группы

мне нужно обработать регулярное выражение, которое работает следующим образом:

  • вход: @one: catвыход: cat
  • вход: @one: dog;выход: dog

Обратите внимание на заключительную полуточку после «собаки», которую я не хочу захватить.

я это почти работает с: new RegExp('^.*:\\s*(.*?);?');

Но мой окончательный ;? не исключаются из матча (.*?).

Как сделать мой выбор менее жадным?

JsBin: http://jsbin.com/ludaqogexa/edit?js,console

+0

Вам действительно нужно выполнить замену строки, или вы пытаетесь установить строку только для захваченной группы? – HeadCode

ответ

3

делая их «менее жадными» осуществляется путем добавления ? после квантора, как вы делали. Проблема в том, что вы не добавили конечный якорь $ - если вы добавите, что ваше регулярное выражение будет работать должным образом. Поведение в этом угловом случае зависит от механизма регулярных выражений; например, для .NET-кода будет соответствовать только один символ в этом случае (d для случая dog) и остановиться.

Однако это не решение ИМХО. Вы должны более точно описать шаблон, а затем он будет работать с жадным соответствием.

/^[^:]+:\s*([^;]+);?/; 
+0

Вы случайно не знаете, почему оригинальные попытки OP не работают? Меня интересует ... почему '' 'часть группы захвата? – musefan

+0

@musefan Отредактировано с объяснением проблемы в исходном регулярном выражении. – Lucero

+0

@ Lucero спасибо, приятное объяснение и лучший подход –