大家早上好
我想做一个正则表达式匹配3个相同的连续数字。它应该只匹配一行中的3个数字(由空格分隔),数字应该相同。如果有少于或多于3个相同的数字,那么输出应该为false
我试过这个正则表达式/.*(\d+) \1 \1(?!(\s\1))/
console.log(/.*(\d+) \1 \1(?!(\s\1))/.test('I am 42 42 4 hey yoo')); //false --> Correct
console.log(/.*(\d+) \1 \1(?!(\s\1))/.test('I am 42 42 42 hey yoo')); //true --> Correct
console.log(/.*(\d+) \1 \1(?!(\s\1))/.test('I am 42 42 42 4 hey yoo')); //true --> Correct
console.log(/.*(\d+) \1 \1(?!(\s\1))/.test('I am 42 42 42 42 hey yoo')); //true --> this output should be false since there are 4 same consecutive digits
字符串
有什么建议吗?
2条答案
按热度按时间pbossiut1#
我假设三个相同的数字串由一个空格分隔,这三个数字中的第一个在字符串的开头,或者前面有一个空格,前面没有相同的字符串,这三个数字中的最后一个字符串在字符串的末尾,或者后面有一个空格,后面没有相同的字符串。
您可以尝试匹配以下正则表达式。
字符串
Demo
正则表达式可以分解如下。(或者,将光标悬停在链接处表达式的每个部分上,以获得其功能的说明。)
型
注意,
(?: .... )
表示非捕获组。mbjcgjjk2#
在你的模式中,你混合了空格和
\s
,\s
匹配一个空格字符,也可以匹配一个换行符。您可以检查第一个捕获组值
(\d+)
前面是否有相同的值。带有字边界以防止部分匹配的版本:
字符串
Regex demo
模式匹配:
\b(\d+)\b
捕获组1,匹配单词边界之间的1+位(?<!\b\1 \1)
负向后看,在此数字之前Assert不同的数字(?: \1){2}\b
重复2次空格,组1值结束于单词边界(?! \1\b)
负前瞻,Assert不是组1值的右边,后面跟着一个字边界型
或者,如果不支持向后查找,您可以匹配3次相同的数字,并可选地匹配第2组中的其余重复数字。
在结果中,您可以检查是否存在不匹配或捕获组2值:
型
Regex demo的
型