来自一道算法题:正则表达式之匹配字符串中连续重复的字符(JavaScript描述)

最近在做遇到如下的算法题:
在这里插入图片描述
其实这算不上什么算法题,纯属是对正则表达式的应用,在这里我们用JavaScript语法进行实现。在实现之前还是先回顾一下知识点吧,在知道的基础看看能不能写出来!

  1. 正则表达式的两个方法
    (1)RegExp.prototype.test(str)

用于测试字符串参数中是否存在匹配正则表达式模式的字符串,如果存在则返回true,否则返回false

在这里插入图片描述
(2)RegExp.prototype.exec(str)

使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。

  • 如果没有匹配的文本则返回null,否则返回一个结果数组。

exec方法在全局和非全局调用时,是有差别的。两者都会返回一个数组,只是非全局调用仅返回第一次的匹配结果。

  • 第一个元素是与正则表达式相匹配的文本;
  • 第二元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话);
  • 第三个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话),以此类推

  • 其中,indexinput为数组的属性
  • index:声明匹配文本的第一个字符的位置;
  • input:存放被检索的字符串string
    在这里插入图片描述
  1. 字符串的四个正则方法
    (1)String.prototype.search(reg)
  • search()方法用于检索字符串中指定的子字符串,或者检索与正则表达式相匹配的子字符串;
  • 方法返回第一个匹配结果index,查找不到返回-1
  • search()方法不执行全局匹配,它将忽略标注g,并且总是从字符串的开始进行检索
    (2)String.prototype.match(reg)
  • match()方法将检索字符串,以找到一个或多个与regexp匹配的文本;
  • regexp是否具有标志g对结果影响很大
    非全局调用
  • 如果regexp没有标志g,那么 match()方法就只能在字符串中执行一次匹配;
  • 如果没有找到任何匹配的文本,将返回null;
  • 否则它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
  • 返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本
  • 除了常规的数组元素之外,返回的数组还含有2个对象属性
    • index声明匹配文本的起始字符在字符串的位置;
    • input声明的stringObject的引用
      在这里插入图片描述
      全局调用
      在这里插入图片描述在这里插入图片描述
      (3)String.prototype.split(reg)
      在这里插入图片描述
      (4)String.prototype.replace
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      上面只基本的用法,那么针对这道题,你该选用什么方法呢。第一次做题时,很遗憾并没有做出来,回顾了一下基础知识,还是有思路的。
      针对题目中的三点,其实就是两点:
      在这里插入图片描述
      不只是三个同样的字母去掉一个,这个条件可以扩展到三个以上同样的字母,可以通过正则表达式分组的形式:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      可能你对正则表达式中的\1和\2,分别表示

\1 表示的是正则里,第一个小括号捕获到的内容。
\2 表示的是正则里,第一个小括号捕获到的内容。

思路有了,把它整合成一道算法题,自然不是难事。不足之处,请指正。
扩展资料:
正则表达式匹配重复的字符串[超详细]附完整实例

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值