为什么没有积极的前瞻作为第一个捕获组?

时间:2014-11-28 12:46:34

标签: javascript regex regex-lookarounds

我使用以下正则表达式;

((?:_missing_:|_exists_:)[a-z0-9]+)|(([a-z0-9]+)(?=:))

匹配lucene查询字符串;

_missing_:title age:(>=10 AND < 20) AND age:123 AND _exists_:title123

第一个非捕获组未得到尊重,并返回_missing_:title而不是title。使用正向前瞻使整个正则表达式无法匹配任何内容。

它应该返回以下数组;

['title', 'age', 'age', 'title123']

1 个答案:

答案 0 :(得分:0)

如下所示更改正则表达式,然后从组索引1和2中获取所需的字符串。

(?:_missing_:|_exists_:)([a-z1-9]+)|([a-z1-9]+)(?=:)

您不需要在捕获组中包含非捕获组(?:_missing_:|_exists_:)。这是返回missing:title而不是title的原因。此外,[a-z1-9]+的捕获组也足够了。

DEMO