javascript - 我该如何修复这个正则表达式函数?

标签 javascript regex string

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

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,如果我继续,则为truefalsetrue,...

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

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

最佳答案

它在 truefalse 之间交替,因为它匹配第一次 (true),然后尝试第二次匹配,但失败,因为有特拉法加广场只有一辆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/

相关文章:

java - 为什么我们可以通过字面量来初始化String、Integer?

javascript - 将模型发布回包含复杂集合的 Controller

python - 在 python 中使用正则表达式提取数据

php - 突出显示搜索结果 : RegEx Character Collation?

python - 用于解析 SDDL 的正则表达式

python - 匹配两个通配符字符串

javascript - 为什么我的 httpresponse 是空的?

javascript - 如何跳转到不同 fullpage.js 滚动部分之间的 #id anchor ?

javascript - 如何使用 JavaScript 将字符串 mm/dd/yyyy 转换为日期 mm/dd/yyyy?

c - 对字符串数组中的单词进行排序