Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式检查字符串中是否有3个相同的字母?_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式检查字符串中是否有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中 (?=:开始向前看 (?:.*

我需要创建正则表达式,它将在一个字符串中查找3个相同的字母,而不管顺序如何

例如:

'aa2ff333' -> false
'aa2a' -> true
'aaa2' -> true
我尝试了这个,但它检查了连续的字母:

(.)\1\1

有什么建议吗?

您可以将此正则表达式与前瞻一起使用:

/([a-zA-Z])(?=(?:.*?\1){2})/

正则表达式详细信息:

  • ([a-zA-Z])
    :匹配字母
    [a-zA-Z]
    ,并将其捕获到组#1中
  • (?=
    :开始向前看
    • (?:.*?\1){2}
      :与捕获组#1中的相同字符至少有两次出现。
      *?\1
      在任何字符的0个或多个之后匹配回引用
      \1
      。这允许在输入中的任何位置匹配重复
  • :结束前瞻

您可以将此正则表达式与前瞻一起使用:

/([a-zA-Z])(?=(?:.*?\1){2})/

正则表达式详细信息:

  • ([a-zA-Z])
    :匹配字母
    [a-zA-Z]
    ,并将其捕获到组#1中
  • (?=
    :开始向前看
    • (?:.*?\1){2}
      :与捕获组#1中的相同字符至少有两次出现。
      *?\1
      在任何字符的0个或多个之后匹配回引用
      \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中再出现两次相同的字符。