You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写匹配恰好3个连续相同数字的正则表达式?

解决正则匹配恰好连续3个空格分隔相同数字的问题

你当前的正则 /.*(\d+) \1 \1(?!(\s\1))/ 失效的核心原因是:.* 会匹配任意前置内容,当存在4个连续相同数字时,正则可以跳过第一个数字,匹配后面的三个,此时这三个数字的后面没有更多相同数字,负向断言 (?!(\s\1)) 会通过,导致整体匹配返回true。

要实现“仅匹配存在连续3个空格分隔的相同数字,且不存在连续4个或更多相同数字”的需求,可以使用组合负向先行断言的正则,先排除存在4个连续相同数字的情况,再匹配存在3个连续相同数字的情况:

const regex = /^(?!.*(\d+)(?: \1){3}).*(\d+)(?: \2){2}.*$/;

正则解释

  • ^:匹配字符串开头
  • (?!.*(\d+)(?: \1){3}):负向先行断言,确保字符串中不存在“一个数字序列 + 三次重复的空格+该数字序列”(即连续4个相同数字)
  • .*(\d+)(?: \2){2}.*:匹配字符串中存在“一个数字序列 + 两次重复的空格+该数字序列”(即连续3个相同数字)
  • $:匹配字符串结尾

测试验证

// 测试用例
console.log(regex.test('I am 42 42 4 hey yoo')); // false → 正确
console.log(regex.test('I am 42 42 42 hey yoo')); // true → 正确
console.log(regex.test('I am 42 42 42 4 hey yoo')); // true → 正确
console.log(regex.test('I am 42 42 42 42 hey yoo')); // false → 正确
console.log(regex.test('42 42 42 42 43')); // false → 正确(存在4个连续42)
console.log(regex.test('123 123 123')); // true → 正确(仅3个连续)

内容的提问来源于stack exchange,提问作者Rol Co

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:09:51