这是我的函数代码的第一部分:

var pattern = new RegExp(myTypedString,"gi");


目的是在输入文本字段时填充结果。每次触发输入事件时,我都会遍历字符串数组,并使用以下代码检查字符串数组中是否存在键入的字符串:

return pattern.test(myArrayString);


但幸运的是,我意识到其中一个结果是错误的,并且仅在这种特定情况下发生:当我键入“ t”或“ T”时,我在“ Trafalgar Square”中没有匹配项(来自myArrayString的字符串) ),因此我在控制台中进行了一些调试,当我检查console.log(pattern)的变量模式时,它会输出以下字符串:/t/gi,我认为这是我的问题所依赖的...(此后)

当我尝试复制问题时键入:

var pattern = new RegExp('t',"gi")


和:

pattern.test('Trafalgar Square')


第一次尝试给我true,但是...如果再次输入:

pattern.test('Trafalgar Square')


结果将为false,如果我继续,则为truefalsetruefalse,...

我想到的第一件事是正则表达式/t中的/t/gi可能是一条规则,但我找不到任何有关它的信息。

我想知道这种意外结果的解释,但是我也担心我的功能不是完美无缺的,所以我问你如何改善这个功能?谢谢

最佳答案

它在truefalse之间交替,因为它第一次匹配(true),然后尝试第二次匹配,但是失败,因为Trafalgar Square中只有一个T。再次调用它时,它会循环返回,因此truefalsetrue等。

要解决此问题,请在匹配之前更新其光标:

var p = new Regexp('t', 'gi') // same as `p = /t/gi`

// ...
p.lastIndex = 0;
p.test("Trafalgar Square"); // true

// try again:
p.lastIndex = 0;
p.test("Trafalgar Square"); // true -> it works


这是一个相关的jsfiddle,并带有几个示例。

关于javascript - 如何修复此正则表达式函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24713155/

10-17 02:00