Javascript 正则表达式检查字符串中是否有3个相同的字母?
我需要创建正则表达式,它将在一个字符串中查找3个相同的字母,而不管顺序如何 例如:Javascript 正则表达式检查字符串中是否有3个相同的字母?,javascript,regex,Javascript,Regex,我需要创建正则表达式,它将在一个字符串中查找3个相同的字母,而不管顺序如何 例如: 'aa2ff333' -> false 'aa2a' -> true 'aaa2' -> true 我尝试了这个,但它检查了连续的字母: (.)\1\1 有什么建议吗?您可以将此正则表达式与前瞻一起使用: /([a-zA-Z])(?=(?:.*?\1){2})/ 正则表达式详细信息: ([a-zA-Z]):匹配字母[a-zA-Z],并将其捕获到组#1中 (?=:开始向前看 (?:.*
'aa2ff333' -> false
'aa2a' -> true
'aaa2' -> true
我尝试了这个,但它检查了连续的字母:
(.)\1\1
有什么建议吗?您可以将此正则表达式与前瞻一起使用:
/([a-zA-Z])(?=(?:.*?\1){2})/
正则表达式详细信息:
:匹配字母([a-zA-Z])
,并将其捕获到组#1中[a-zA-Z]
:开始向前看(?=
:与捕获组#1中的相同字符至少有两次出现。(?:.*?\1){2}
在任何字符的0个或多个之后匹配回引用*?\1
。这允许在输入中的任何位置匹配重复\1
:结束前瞻)
/([a-zA-Z])(?=(?:.*?\1){2})/
正则表达式详细信息:
:匹配字母([a-zA-Z])
,并将其捕获到组#1中[a-zA-Z]
:开始向前看(?=
:与捕获组#1中的相同字符至少有两次出现。(?:.*?\1){2}
在任何字符的0个或多个之后匹配回引用*?\1
。这允许在输入中的任何位置匹配重复\1
:结束前瞻)
let threeChars=(str)=>{
让obj=[…str].reduce((op,inp)=>{
如果(/[a-z]/i.test(inp)){
op[inp]=op[inp]| | 0
op[inp]+=1
}
返回操作
}, {})
返回Object.values(obj).some(v=>v==3)
}
log(三字符('aa2ff333'))
console.log(三字符('aa2a'))
log(threeChars('aaa2'))
一种方法是循环遍历字符串并计算每个字符的出现次数,然后检查是否有任何字符出现了整整三次
let threeChars=(str)=>{
让obj=[…str].reduce((op,inp)=>{
如果(/[a-z]/i.test(inp)){
op[inp]=op[inp]| | 0
op[inp]+=1
}
返回操作
}, {})
返回Object.values(obj).some(v=>v==3)
}
log(三字符('aa2ff333'))
console.log(三字符('aa2a'))
console.log(threeChars('aaa2'))
首先对它们进行排序,并在排序后的字符串上使用表达式。如果有4个字母呢?它必须区分大小写吗?首先对它们进行排序,然后在排序后的字符串上使用表达式。如果有4个字母呢?它必须区分大小写吗?使用:/([a-z])(?=(?:.*1{2})/我
如果您想忽略字母重复的情况。谢谢您分享美好的代码,先生。你能解释一下为什么这里需要负面观察吗?道歉,如果这是一个愚蠢的问题。实际上,这是一个积极的展望,而不是消极的展望。如回答(?=…)
中所述,是为了确保同一字符在捕获组#1中再出现两次。如果您想忽略字母重复的大小写,请使用:/([a-z])(?=(?:.*1){2})/i
。谢谢您分享漂亮的代码,先生。你能解释一下为什么这里需要负面观察吗?道歉,如果这是一个愚蠢的问题。实际上,这是一个积极的展望,而不是消极的展望。如回答(?=…)
中所述,是为了确保在捕获组#1中再出现两次相同的字符。