【问题标题】:Misunderstanding about regex对正则表达式的误解
【发布时间】:2012-11-03 09:15:37
【问题描述】:

我有一个例子:

var p =  /^(\d)+$/;
var s = '834736';
var a = p.exec(s);
console.log(a);

我想对第一个数字^(\d)进行分组,但结果是:

["834736", "6"]

它捕获最后一个数字。谁能给我解释一下?谢谢!

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    如果您只想捕获第一个数字,请将第一个数字放入组中,然后匹配组外的其余数字,如下所示:

    /^(\d)\d*$/
    

    您只抓住最后一个数字的原因是,您为匹配的每个数字重复相同的组。这意味着,每次匹配一个新数字时,该组的旧内容都会被替换,因此您将获得最后一个数字作为您的组的结果。

    【讨论】:

    • 感谢您的回答。但是你能告诉我为什么我上面的正则表达式会抓住最后一个数字吗?
    • @BoodCarley 您将+ 放在捕获组之外,因此捕获组一次只匹配一个数字,直到它不再匹配,此时它包含最后一个数字。
    【解决方案2】:

    您应该将+ 放在组内,或者(如果您只想要第一个数字)拆分表达式:

    /^(\d)\d*$/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2011-10-10
      相关资源
      最近更新 更多