JS正则判断多个连续相同字符


var reg1 = /(\w)\1\1/g; //判断2个连续字符
var reg2 = /(\w)\1{2}/g; //判断3个连续字符
var reg3 = /(\w)\1\1/g;  //判断3个连续字符

var str = 'aa!@#123AaAaAAA3';

str.match(reg1); // 输出['aa','AA']
str.match(reg2); // 输出['AAA']
str.match(reg3); // 输出['AAA']

//reg2和reg3表达的意思相同


//一般情况,当我们想匹配任意两个相同的字符(复杂一点就是两个相同的分组)时,往往可以借助下面的写法  
//说明:  
//(\w)用来匹配任何除了换行和制表符的字符, 而\1是对(\w)的一个引用, 所以你可以理解成: (\w)\1 就是(\w)(\w)  
//但是,  
//(\w)\1 和 (\w)(\w)的不同之处在于,  (\w)(\w)表示任意两个连续的字符, 比如Ac, MM, K9, 都可以,  
// 但(\w)\1只能是AA, CC, 99 这样连续相同的字符  
  
//所以, \1 是对(\w)的一个实例化引用, 当(\w) 匹配到A时, \1 被表达成A, 当(\w)匹配9时, \1 被表示成9  
  • 上面这段代码就是匹配一个串里是否有n个相同连续字符
  •  匹配3个连续相同字符的是(\w)\1{2}这一小段
  • 括号表示组,是配合\1来用的,然后\1表示组里面第一个匹配到的内容,在我这里就表示\w表示的那个字符
  • 比如\w是6的话,\1也就表示6;\w表示a的话,\1就表示a
  • {2}表示\1重复2遍,所以也可以写成(\w)\1\1
### JavaScript 正则表达式匹配字符连续出现 在 JavaScript 中,可以通过正则表达式来检测某个子字符串是否在其目标字符串中连续多次出现。这种需求通常可以借助量词 `{n}` 或 `{m,n}` 来实现,其中 `n` 表示精确次数,而 `m,n` 则表示最小到最大范围内的重复次数。 以下是具体的实现方式: #### 使用量词匹配固定次数的连续字符 如果希望匹配某字符串恰好连续出现了指定次数,则可以在正则表达式中使用大括号 `{}` 定义该数量。例如,假设我们要查找单词 `"abc"` 连续两次的情况: ```javascript const regex = /(abc){2}/g; const str = "abcabc is a test string abcabc"; const matches = str.match(regex); console.log(matches); // 输出 ["abcabc", "abcabc"] ``` 这里 `(abc)` 是被捕捉的内容部分,后面跟上的 `{2}` 就指定了前面捕获组应该正好重复两次[^1]。 #### 动态调整匹配次数 当不确定具体需要多少次连续出现时,也可以设置一个区间值。比如寻找至少三次以上但不超过五次的模式可以用如下形式定义: ```javascript let pattern = /(\w{3}){3,5}/; // \w{3} 匹配任意三个字母数字组合; {3,5} 指定其可重复三至五次。 ``` 此代码片段会尝试找到由相同三位数序列构成并连续发生最少三次最多五次的结果集[^1]。 #### 替换操作实例 除了简单的匹配之外,还可以利用 `.replace()` 函数来进行基于正则表达式的替换工作。假如现在想把所有形如 'aa' 的双字节结构替换成单个'a': ```javascript var txt = "aabbccddeeff"; var res = txt.replace(/(.)\1/g,"$1"); //$1 引用了第一个分组所匹配的文字 console.log(res); // 结果为abcdef ``` 在这个例子当中,`(.)` 构建了一个匿名群组用来记住每一个单独字符是什么样的东西,`\1` 则代表再次引用之前那个相同的符号以便确认它们确实成对存在。 ### 总结 通过上述介绍可以看出,在JavaScript里运用恰当构造出来的正则表达式能够轻松解决有关于特定样式数据串列的问题。无论是单纯识别还是进一步修改原始资料皆可行得通。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值