I had 另一个问题 https://stackoverflow.com/questions/9860057/javascript-regex-match-defective虽然得到了回答,但我不明白为什么正则表达式会受到这样的影响
From w3学校 http://www.w3schools.com/jsref/jsref_obj_regexp.asp it says
g:执行全局匹配(查找所有匹配项而不是在第一个匹配项后停止)
可以,当然。我明白。这就是为什么我在这段代码中得到一个数组
var str="The rain in SPAIN stays mainly in the plain";
var patt1=/ain/gi;
document.write(str.match(patt1));
Output:
ain,AIN,ain,ain
正则表达式类似,/g
它将取代多个实例。
然而在比赛中
var re=/hi/gi;
alert(re.test("hi") + " " + re.test("hi"));
结果是“真假”。
现在为什么 $%^& 会这样做呢?两次测试中的字符串完全相同!在过去,我认为全局意味着它将跨换行符进行搜索(这就是我在这个测试中想要做的)。我引用的第一件事是关于 g 是一个全局匹配。
没有任何提及它会影响下一次通话!没有 /g 代码将正常工作(而且我也不需要跨越换行符)。为什么会影响接下来的测试呢?口香糖答案提到它会影响调用之间的lastIndex以及%^&*我不知道有共享状态,因为当我使用g标志时其他两个函数没有使用它。我只想要一个 true 和 false,但如果有任何内容不应该匹配,则返回一个包含全局找到的匹配数量的 int ? (即“hi”中为 1,但字符串“hihi”中为 2)。
为什么在执行 regex.test 时 g 会影响我的下一次调用?!另外,如果可以的话,请提供我真正想要该“功能”的时间
当您在正则表达式中使用全局标志时,lastIndex 属性会更新。 lastIndex 属性是开始下一场比赛的索引。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
您可以在再次调用之前重置最后一个索引。看
为什么 Javascript 中带有全局标志的 RegExp 会给出错误的结果? https://stackoverflow.com/questions/1520800/why-regexp-with-global-flag-in-javascript-give-wrong-results
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)