gpt4 book ai didi

javascript - 正则表达式未返回一致的结果

转载 作者:行者123 更新时间:2023-11-30 09:11:51 25 4
gpt4 key购买 nike

我有一个由切片句子组成的数组 split ,但我针对每个“单词”测试的正则表达式似乎不一致。

function test (reg) {
const tags = [];
const split = ["man", "man"];

console.log(split)
split.forEach((word, key) => {
console.log(key)
if (reg.test(word)) {
console.info('Word:', word)
tags.push(word)
} else {
console.log('Not word:', word)
}
})
}

const pathRegex = new RegExp(/^[A-ZÀ-Ýa-zà-ý0-9_]+[^.#$?\[\]]$/g);
const pathRegex2 = new RegExp(/^[0-9a-zA-Z/-]+[^.#$?\[\]]$/g);

console.log('test 1:')
test(pathRegex)
console.log('test 2:')
test(pathRegex2)

参见:https://codepen.io/TrySpace/pen/VwZNPLV?editors=1112

输出:

0
Word: man
1
Not word: man

我在这里缺少什么?

我希望 RegExp.test每次返回相同的结果。

我注意到的是当我替换 reg 时与 new RegExp(/^[A-ZÀ-Ýa-zà-ý0-9_]+[^.#$?\[\]]$/g)它会给我预期的结果。

问题是为什么?

最佳答案

您的通知是正确的。带有 g 修饰符的正则表达式将跟踪发生匹配的 lastIndex 的问题。所以我们可以说它们在这种情况下是有状态的。

您可以传递字符串表达式并在函数中创建 RegExp 对象。

或者应用dirty hack并手动重置lastIndex:

reg.lastIndex = 0;

关于javascript - 正则表达式未返回一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58120991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com