javascript - 为什么积极的前瞻性不能作为第一个捕获组?

标签 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 和 2 中获取您想要的字符串。

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

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

DEMO

关于javascript - 为什么积极的前瞻性不能作为第一个捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188999/

相关文章:

javascript - 如何限制 javascript/Angular 中第一个位置的空间

javascript - JS 中的lookbehind 支持是什么?如何更换?

javascript - 正则表达式:查找字母后的单词,但不将该字母包含在结果中

javascript - 如何在Vue.js中计算部分值和总值?

sql - 正则表达式中的 Mysql 字段名称

javascript - For 循环和奇怪的 Vue 行为

javascript - 如何在js中使用正则表达式获取子字符串

python - pandas 使用正则表达式从文本中获取值

javascript - 页面重新加载时恢复表状态

javascript - CSS Z-index child above parent and div under parent