Javascript正则表达式未返回预期值
我有一个Javascript迭代/Regex表达式,这让我发疯,希望有人能提供一些见解,因为我遇到的挑战似乎是JS特有的。如您所见,我使用的正则表达式检查字母在字符串中是否出现2次或更多次,如果没有出现,则返回指定索引处的字母。但是,对于“testing”之类的字符串,它将返回“t”,尽管字符串中存在两次“t”。然而,其他字符串,如“aaaac”,它将正确返回“c”。我已经在Rubular中对它进行了测试,正则表达式工作得很好,所以我无法确定为什么它在这种情况下不工作Javascript正则表达式未返回预期值,javascript,regex,algorithm,iteration,Javascript,Regex,Algorithm,Iteration,我有一个Javascript迭代/Regex表达式,这让我发疯,希望有人能提供一些见解,因为我遇到的挑战似乎是JS特有的。如您所见,我使用的正则表达式检查字母在字符串中是否出现2次或更多次,如果没有出现,则返回指定索引处的字母。但是,对于“testing”之类的字符串,它将返回“t”,尽管字符串中存在两次“t”。然而,其他字符串,如“aaaac”,它将正确返回“c”。我已经在Rubular中对它进行了测试,正则表达式工作得很好,所以我无法确定为什么它在这种情况下不工作 function foun
function found (str) {
for (const number in str) {
let regex = new RegExp( str[number] + "{2,}");
if (!str.match(regex)) {
return str[number]
}
}
}
我将非常感谢任何可以提供的见解 x{n,m}regex模式匹配x序列。在“测试”一词中,t是分开的,模式与它们不匹配 使用global
g
标志搜索数组中字母的所有外观,然后将找到的匹配数与阈值(2)进行比较:
找到函数(str){
for(str中的常量编号){
const regex=new RegExp(str[number],'g');
常量匹配=str.match(regex);
如果(!str.match(regex)| match.length<2){
返回str[number];
}
}
}
console.log(找到('testing'))x{n,m}regex模式匹配x序列。在“测试”一词中,t是分开的,模式与它们不匹配 使用global
g
标志搜索数组中字母的所有外观,然后将找到的匹配数与阈值(2)进行比较:
找到函数(str){
for(str中的常量编号){
const regex=new RegExp(str[number],'g');
常量匹配=str.match(regex);
如果(!str.match(regex)| match.length<2){
返回str[number];
}
}
}
console.log(找到('testing'))代码>错误在正则表达式中,它只匹配连续字符,“aaaac”是一个特殊的测试。所以要想成功,就改变它
function found (str) {
for (const number in str) {
let regex = new RegExp( str[number] + ".*" + str[number]);
if (!str.match(regex)) {
return str[number]
}
}
}
错误在正则表达式中,它只匹配连续字符,“aaaac”是一个特殊的测试。所以要想成功,就改变它
function found (str) {
for (const number in str) {
let regex = new RegExp( str[number] + ".*" + str[number]);
if (!str.match(regex)) {
return str[number]
}
}
}
t{2,}
测试两个或多个紧邻的t
实例。它匹配攻击
和攻击
,但不匹配测试
,测试从不包含两个字符序列tt
相反,您需要的是t.*t
形式的内容,它测试t
,后跟零个或多个字符,在某个点上后跟另一个t
。请尝试:
new RegExp(str[number] + ".*" + str[number]);
但是,请注意,代码有几个与此问题无关的属性:
- 在循环中为-
使用
,包括所有可枚举属性,这些属性可能包括字符串中字符的多个索引。如果库使用可枚举属性扩展了
,它将包含在循环中,这可能会导致意外结果。选择从String.prototype
到0
的数字循环str.length-1
- 动态创建的正则表达式不会清理输入,如果测试正则表达式特殊字符,如
、
或*
,可能会导致问题。看?
t{2,}
测试两个或多个紧邻的t
实例。它匹配攻击
和攻击
,但不匹配测试
,测试从不包含两个字符序列tt
相反,您需要的是t.*t
形式的内容,它测试t
,后跟零个或多个字符,在某个点上后跟另一个t
。请尝试:
new RegExp(str[number] + ".*" + str[number]);
但是,请注意,代码有几个与此问题无关的属性:
- 在循环中为-
使用
,包括所有可枚举属性,这些属性可能包括字符串中字符的多个索引。如果库使用可枚举属性扩展了
,它将包含在循环中,这可能会导致意外结果。选择从String.prototype
到0
的数字循环str.length-1
- 动态创建的正则表达式不会清理输入,如果测试正则表达式特殊字符,如
、
或*
,可能会导致问题。看?