2014-11-27 2 views
0

Позволяет сказать, есть несколько регулярных выраженийрасслоение плотной регулярное выражение - группа приоритет

  1. .+
  2. (?:BBB)?CCC

, которые объединены в одно выражение в виде групп - /^(first) (second)$/

Обе группы должны не «знают» друг о друге (что означает - я не могу изменить их выражения).

/^(.+) ((?:BBB)?CCC)$/.exec('AAA BBB CCC'); 

Текущий результат:

["AAA BBB CCC", "AAA BBB", "CCC"] 

Ожидаемый результат:

["AAA BBB CCC", "AAA", "BBB CCC"] 

Как приоритеты групп, так что BBB заканчивается во второй?

ответ

1

Сделайте первый .+ (, который был внутри группы захвата) в качестве non-greedy путем добавления неохотой квантор ? рядом с +

^(.+?) ((?:BBB)?CCC)$ 

DEMO

> /^(.+?) ((?:BBB)?CCC)$/.exec('AAA BBB CCC'); 
[ 'AAA BBB CCC', 
    'AAA', 
    'BBB CCC', 
    index: 0, 
    input: 'AAA BBB CCC' ] 
+0

Слишком легко! Благодарю. :) – ikaruss

+0

Добро пожаловать :-) –

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