这是函数中我的代码的第一部分:
var pattern = new RegExp(myTypedString,"gi");
目标是在我在文本字段中键入内容时填充结果。每次触发输入事件时,我都会循环遍历字符串数组,并使用以下代码检查我输入的字符串是否存在于字符串数组中:
return pattern.test(myArrayString);
但幸运的是,我意识到其中一个结果是错误的,并且这只发生在这种特殊情况下:当我输入“t”或“T”时,我在“Trafalgar Square”(特拉法加广场)中没有匹配项来自 myArrayString 的字符串),所以我在控制台中进行了一些调试,当我检查变量模式时,它会输出以下字符串:/t/gi
,我认为这就是我的问题所依赖的地方......(稍后再说)
当我尝试复制问题时键入:
var pattern = new RegExp('t',"gi")
和:
pattern.test('Trafalgar Square')
第一次尝试时给我true
,但是...如果我再次输入:
pattern.test('Trafalgar Square')
结果将为false
,如果我继续,则为true
、false
、true
、假
,...
我想到的第一件事是正则表达式 /t/gi
中的 /t
可能是一条规则,但我找不到任何东西关于它。
我想知道对这个意外结果的解释,但我也担心我的功能不是完美无缺的,所以我问你我该如何改进这个功能?谢谢
最佳答案
它在 true
和 false
之间交替,因为它匹配第一次 (true
),然后尝试第二次匹配,但失败,因为有特拉法加广场
只有一辆T。当您再次调用它时,它会循环返回,从而出现 true
、false
、true
等
要解决这个问题,请在匹配之前更新其光标:
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/