gpt4 book ai didi

Javascript 正则表达式不返回预期值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:04 26 4
gpt4 key购买 nike

我有一个 Javascript 迭代/正则表达式让我发疯,希望有人能提供一些见解,因为我遇到的挑战似乎是 JS 特有的。如您所见,我使用的正则表达式检查字母是否在字符串中出现 2 次或更多次,如果没有出现,则返回指定索引处的字母。但是,对于诸如“testing”之类的字符串,尽管“t”在字符串中存在两次,它仍将返回“t”。然而,其他字符串,例如“aaaaac”,它将正确返回“c”。我已经在 Rubular 中测试过它并且 Regex 表达式工作正常,所以我无法确定为什么它在这种情况下不起作用。

function found (str) {
for (const number in str) {
let regex = new RegExp( str[number] + "{2,}");
if (!str.match(regex)) {
return str[number]
}
}
}

如果能提供任何见解,我将不胜感激!

最佳答案

t{2,}测试 t 的两个或多个紧邻实例.它匹配 attackattttack但不匹配testing , 它从不包含双字符序列 tt .

相反,您需要 t.*t 形式的内容, 它测试 t ,后跟零个或多个字符,然后是另一个 t在某一点。试试看:

new RegExp(str[number] + ".*" + str[number]);

但是,请注意您的代码有几个与此问题无关的相关属性:

  • 使用 for - in loop 包括所有可枚举的属性,其中可能包含的不仅仅是字符串中字符的索引。如果库扩展 String.prototype具有可枚举属性,它将包含在您的循环中,这可能会导致意外结果。从 0 中选择一个数字循环通过str.length-1相反。

  • 您动态创建的正则表达式不会净化输入,如果测试像 . 这样的正则表达式特殊字符,这可能会导致问题, *? .参见 Is there a RegExp.escape function in Javascript?

关于Javascript 正则表达式不返回预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46797157/

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