正则表达式将匹配的最后一个单词捕获为一个组

时间:2019-01-10 17:08:56

标签: javascript regex regex-group

我有一个简单的正则表达式,例如_(([a-zA-Z]|_)*),可以匹配下划线之后的任何单词,例如_price_range * _qty_val,这是我正在寻找的price_range, qty_val字样,但由于奇怪的错误,三个匹配组,最后一个是匹配词的最后一个词,在我的情况下为el。有人可以解释或让我在这里做错什么吗?我不要最后一个匹配的组。

请检查屏幕截图。 enter image description here

2 个答案:

答案 0 :(得分:1)

意外捕获组是组2,即内括号([a-zA-Z]|_)

一个简单的解决方法是使该组不被捕获:

_((?:[a-zA-Z]|_)*)

[a-zA-Z]|_可以简化为[a-zA-Z_],因此您的正则表达式可以是这样:

_([a-zA-Z_]*)

答案 1 :(得分:0)

尝试一下(example here

_[^ *]*     or grouped     _([^ *]*)

let s = "_price_range * _qty_val"

let r = s.match(/_[^ *]*/g).slice(0).map(x=>x.substr(1));

console.log(r);