【问题标题】:Javascript regex matching string ending with number inconsistentJavascript正则表达式匹配以数字结尾的字符串不一致
【发布时间】:2013-03-14 04:52:46
【问题描述】:

我有以下正则表达式模式,它们与 URL 列表中以数字结尾的所有 'act' 匹配。

正则表达式模式/\/ch(\d+)\/act(\d+)/gi

Javascript 代码

pageSrc[1] = "../ch01/index.html";
pageSrc[2] = "../ch01/act01/1.html";
pageSrc[3] = "../ch01/act01/2.html";
pageSrc[4] = "../ch01/act02/1.html";
pageSrc[5] = "../ch01/act02/2.html";
pageSrc[6] = "../ch01/actx/1.html";

var pattern = /\/ch(\d+)\/act(\d+)/gi;
for(var i=0; i<pageSrc.length; ++i){
  var hasAct = pattern.test(pageSrc[i]);
  console.log(hasAct);
}

预期结果和实际结果

|   String   | Expected Result |   Actual Result  |
| pageSrc[1] |       false     |     false        |
| pageSrc[2] |       true      |     true         |
| pageSrc[3] |       true      |     *FALSE       |
| pageSrc[4] |       true      |     true         |
| pageSrc[5] |       true      |     *FALSE       |
| pageSrc[6] |       false     |     false        |

我不确定为什么 pageSrc[3] 不会返回 true。我在 gskinner.com 上使用了 regEx 测试器,效果很好,这里是链接http://gskinner.com/RegExr/?344ap

谁能帮我看看?提前致谢!

【问题讨论】:

    标签: javascript jquery regex string numbers


    【解决方案1】:

    删除g 标志。来自the RegExp.test documentation:

    exec(或与其结合)一样,test 在同一个全局正则表达式实例上多次调用将超过上一次匹配。

    在重用这样的模式时,您不希望进行全局搜索。

    > var pageSrc = [];
    > pageSrc[1] = "../ch01/index.html";
      pageSrc[2] = "../ch01/act01/1.html";
      pageSrc[3] = "../ch01/act01/2.html";
      pageSrc[4] = "../ch01/act02/1.html";
      pageSrc[5] = "../ch01/act02/2.html";
      pageSrc[6] = "../ch01/actx/1.html";
    
      var pattern = /\/ch(\d+)\/act(\d+)/i;
      for(var i=0; i<pageSrc.length; ++i){
        var hasAct = pattern.test(pageSrc[i]);
        console.log(i, hasAct);
      }
      0 false
      1 false
      2 true
      3 true
      4 true
      5 true
      6 false
    

    【讨论】:

      【解决方案2】:

      您正在使用/g。删除该标志以使其工作。

      g 标志使正则表达式从 pattern.lastIndex(上一个匹配结束的索引)开始匹配,直到失败,然后从 0 开始。

      【讨论】:

      • 感谢您的回复,您的解决方案与马特的解决方案一样。由于我无法标记 2 个答案,因此我投票赞成您的答案 :) 再次感谢!
      猜你喜欢
      • 2015-08-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2011-09-23
      相关资源
      最近更新 更多