我的代码如下,
HTML:
<p id="test"></p>?
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var patt = /h/gi;
var arr = ["", "2Hour", "4Hour", "8Hour", "Next Business Day"];
var test = document.getElementById("test");
for (var i = 0; i < arr.length; i++)
{
if (patt.test(arr[i])) {
test.innerHTML += " " + arr[i];
}
}
Run Code Online (Sandbox Code Playgroud)
然而,得到的输出是2Hour 8Hour,为什么4小时不是输出的一部分?
我的正则表达式有问题吗?我该如何解决这个问题?
我把它放在小提琴上
引用MDN:
与exec(或与其结合)一样,在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配.
目前发生的事情是:
patt测试第二个字符串中的正则表达式,在索引处找到匹配项1,并保留此信息test它时会尝试从索引1
开始查找匹配,这显然不会产生匹配,因为它有效地测试了字符串"our"0,允许1找到索引处下一个字符串中的匹配项.因此,要解决您的问题,只需在每次迭代时创建一个新实例:
for (var i = 0; i < arr.length; i++)
{
if (/h/gi.test(arr[i])) {
test.innerHTML += " " + arr[i];
}
}
Run Code Online (Sandbox Code Playgroud)
这样"清除指针",并确保正则表达式对于测试的每个字符串的行为相同.
这是一个演示:http://jsfiddle.net/QbXEX/12/
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |