javascript中奇怪的正则表达式行为

javascript中奇怪的正则表达式行为,javascript,regex,Javascript,Regex,可能重复: 我的代码如下: HTML: <p id="test"></p>​ ​ 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.

可能重复:

我的代码如下:

HTML:

<p id="test"></p>​

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];
    }
}
var patt=/h/gi;
var arr=[,“2小时”,“4小时”,“8小时”,“下一个工作日];
var测试=document.getElementById(“测试”);
对于(变量i=0;i
但是,得到的输出是
2小时8小时
,为什么4小时不是输出的一部分

我的正则表达式有问题吗?我如何解决这个问题

我把它挂在墙上了

引用MDN:

与exec(或与之结合使用)一样,test被多次调用 在上,相同的全局正则表达式实例将前进超过 上一场比赛

目前正在发生的是:

  • 存储在
    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];
        }
    }
    
    for(变量i=0;i
    这将原封不动地“清除指针”,并确保正则表达式对其所测试的每个字符串的行为相同

    下面是一个演示:

    引用MDN:

    与exec(或与之结合使用)一样,test被多次调用 在上,相同的全局正则表达式实例将前进超过 上一场比赛

    目前正在发生的是:

  • 存储在
    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];
        }
    }
    
    for(变量i=0;i
    这将原封不动地“清除指针”,并确保正则表达式对其所测试的每个字符串的行为相同

    下面是一个演示: