正则匹配相同字符

2 篇文章 0 订阅

我在很多面试题里都看到有在一个字符串里对相同字符的一些操作,获取相同字符大多人都会用遍历的方法,但是正则也是可以满足我们部分需求的。

语法

()\n

匹配相同字符需要用到\这个元字符,而这个元字符又必须配合()使用。

举例
求相同两个的数字

'1122'.match(/(\d)\1/g)  //["11", "22"]

推演
有时候我们需要的不仅仅是两个相同数字,我们可以继续在后面继续\1操作

求相同三个的字符

'112aadddddw2'.match(/(.)\1\1/g)  //["ddd"]

大家可能对相同字符的数量判断有些不太明白,其实我们可以拆开看,()匹配一次,\1匹配一次,两个\1就是两次,总共三次。当然,若是要进行多次匹配肯定相当麻烦,所以可以使用{}进行\1的替换。

'112aadddddw2'.match(/(.)\1{2}/g)  //["ddd"]

\1后面使用{}就是表示\1的数量,不包含前面的\1,也就是说真实的数量是n + 1

注意:
有人肯定会发问既然\1表示前一个()里面的内容,那么\2呢,或者\n
其实呢,\1引用的是第 1 个子表达式,\2引用的是第 2 个子表达式。

//求一个两位数字后面跟着三个字母的字符
/(\d)\1(\w)\2{2}/.test('x222aaas')  // true
//求重复两次的一个数字跟着一个字母并最后跟着一个字母
/(\d(\w))\1\2/.test('2w2ww')   // true
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值