正则表达式回归真假

时间:2014-03-13 16:08:33

标签: javascript regex

 windowLocation = /(^\/t\d+)|(^\/post\?.+(post|reply){1})|(\/privmsg\?.+(post|reply){1})/g;
 windowLocation.test(window.location.pathname+window.location.search);

此代码保留返回true,如果再次尝试,则返回false。我需要测试类似的路径名和搜索

 /t12
 /post?t=2&mode=reply
 /privmsg?mode=reply&p=62

关于为什么这会一直返回true和false的任何建议?

1 个答案:

答案 0 :(得分:2)

这是因为你的正则表达式中使用了/g(全局)标志。如果你删除它会没事的。

windowLocation = /(^\/t\d+)|(^\/post\?.+(post|reply){1})|(\/privmsg\?.+(post|reply){1})/;

在正则表达式中使用全局标志时,lastIndex属性在不同的调用RegExp#test(string)之间保持不变。 lastIndex属性是开始下一场比赛的索引。

上面的正则表达式我得到了:

windowLocation.test("/t12");
true
windowLocation.test("/t12");
true
windowLocation.test("/t12");
true

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp