为什么正向前瞻不能作为第一个捕获组起作用?

sid*_*uko 5 javascript regex regex-lookarounds

我正在使用以下正则表达式;

((?:_missing_:|_exists_:)[a-z0-9]+)|(([a-z0-9]+)(?=:))
Run Code Online (Sandbox Code Playgroud)

匹配 lucene 查询字符串;

_missing_:title age:(>=10 AND < 20) AND age:123 AND _exists_:title123
Run Code Online (Sandbox Code Playgroud)

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

它应该返回以下数组;

['title', 'age', 'age', 'title123']
Run Code Online (Sandbox Code Playgroud)

Avi*_*Raj 5

像下面这样更改你的正则表达式,然后从组索引 1 和 2 中获取你想要的字符串。

(?:_missing_:|_exists_:)([a-z1-9]+)|([a-z1-9]+)(?=:)
Run Code Online (Sandbox Code Playgroud)

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

演示版