可能重复:
Javascript RegExp的有趣测试
正则表达式测试无法在true和false之间做出决定(JavaScript)
问题的例子.在内联运行时,结果如我所料.但是当存储为变量时,它会跳过中间跨度元素.
// 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;
}
?
Run Code Online (Sandbox Code Playgroud)
标记:
<span class="toggler">A</span>
<span class="toggler">B</span>
<span class="toggler">C</span>
Run Code Online (Sandbox Code Playgroud)
鉴于:我理解没有理由使用RegExp进行这种比较,我也理解jQuery这样的优秀库.我也知道g在这种情况下不需要.
我无法理解为什么这两种方法应该返回不同的结果.
RegExp实例是有状态的,因此重用它们会导致意外行为.在这种特殊情况下,这是因为实例是全局的,这意味着:
应该针对字符串中的所有可能匹配来测试正则表达式.
然而,这不是使用造成的唯一差异g.来自RegExp.test@ MDN:
与
exec(或与之结合使用)一样,test在同一个全局正则表达式实例上多次调用将超过前一个匹配.
删除的g标志,或者设置lastIndex到0(感谢, @zzzzBov).
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |