【问题标题】:Regex captures the last word of match as a group正则表达式将匹配的最后一个单词作为一个组捕获
【发布时间】:2019-01-10 17:08:56
【问题描述】:

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

请检查屏幕截图。

【问题讨论】:

  • 您的意思是匹配_ 之后的任何0+ 字母或下划线吗?然后使用单个捕获组,_([a-zA-Z_]+)
  • 那行得通,你能指出我的错误吗?
  • 嵌套捕获组是问题所在。

标签: javascript regex regex-group


【解决方案1】:

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

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

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

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

_([a-zA-Z_]*)

【讨论】:

    【解决方案2】:

    试试这个 (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);

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多