js regexp - 组优先级

时间:2014-11-27 08:57:45

标签: javascript regex grouping

可以说,有多个正则表达式

  1. .+
  2. (?:BBB )?CCC
  3. 以单个表达式组合为组 - /^(first) (second)$/

    两个小组都不应该知道"关于彼此(意思是 - 我无法改变他们的表达方式)。

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

    目前的结果:

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

    预期结果:

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

    如何确定组的优先级,以便BBB最终成为第二个组?

1 个答案:

答案 0 :(得分:1)

通过在.+ <旁边添加不情愿的量词?,将第一个+在捕获组中)设为non-greedy / p>

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

DEMO

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