可能重复:
Interesting test of Javascript RegExp
Regular expression test can't decide between true and false (JavaScript)为什么相同的RegExp行为有所不同?
Example of issue。当内联运行时,结果如我所料。但是,当作为变量存储时,它将跳过中间跨度元素。
// Inline RegExp
function getToggleClasses() {
var toggler = [],
elements = document.getElementsByTagName("*"),
i=0,
len = elements.length;
for (i; i < len; i++) {
if (/toggler/g.test(elements[i].className)) {
toggler.push(elements[i]);
}
}
document.getElementById('results').innerHTML += "<br />Inline: " + toggler.length;
}
// Variable
function getToggleClasses2() {
var toggler = [],
elements = document.getElementsByTagName("*"),
tester = /toggler/g,
i=0,
len = elements.length;
for (i; i < len; i++) {
if (tester.test(elements[i].className)) {
toggler.push(elements[i]);
}
}
document.getElementById('results').innerHTML += "<br />Variable: " + toggler.length;
}
标记:
<span class="toggler">A</span>
<span class="toggler">B</span>
<span class="toggler">C</span>
鉴于: 我明白没有理由要使用正规做这种比较,我也明白了很大的库如jQuery的怎么样了。我也知道在这种情况下不需要g
。
我不明白为什么这两种方法应该返回不同的结果。
这只是个人偏好,但我认为它会提高清晰度,使括号围绕在正文上调用函数时具有标志的正则表达式文字。 – JAB
@apillers,你是对的。你寻找什么来找到那些?我找不到要搜索的内容以获得我之前的结果。 – Joe
我骗了一点,并搜索'[javascript]正则表达式测试lastindex' - 我确信这个问题之前已经被问过,我知道答案会包含文字'lastIndex'。这是一个很好的例子,表明存在重复问题并不一定表明提问者是疏忽的;你已经提出了一个好的问题来解决一个难以搜索的问题。 – apsillers