我有一个数组,是这样的。
const list = [["GET", /github/g]];
这是一个带子数组的数组,索引0是一个字符串,索引1是一个正则表达式。
我想做这样的事情。
function checkList() {
return list.find(i => i[0] === "GET" && i[1].test("github.com"));
}
我希望每次都能返回找到的列表,但事实并非如此,它在返回列表和返回正则表达式之间来回切换。undefined
.
下面是一个例子。
let i = 1;
const list = [["GET", /github/g]];
while (i <=10) {
console.log(list.find(i => i[0] === "GET" && i[1].test("github.com")))
i++
}
在这个例子中,我只是通过它循环并记录结果,以显示它返回列表和 undefined
每隔一段时间。这到底是怎么回事?
出现这种情况是因为 i[1]
实际上是有状态的。你的代码调用 i[1].test(...)
在奇数迭代上,与 "github"
在 "github.com"
,并推进 lastIndex
. 然后,在下一次偶数迭代时,下一次对 test
未能找到另一个匹配项,到达字符串的末端。之后,正则函数会从字符串的开头重新开始搜索。
如果你只想检查模式是否至少被找到一次,你可以简单地删除了 /g
标志。
来自 MDN 文档。
和exec()一样(或者和它结合使用),在同一个全局正则表达式实例上多次调用test(),会使之前的匹配提前。
(参见 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsRegExptest。)