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

  • Post author:
  • Post category:java


最近在做遇到如下的算法题:

在这里插入图片描述

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

  1. 正则表达式的两个方法

    (1)RegExp.prototype.test(str)

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

true

,否则返回

false

在这里插入图片描述

(2)RegExp.prototype.exec(str)

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

  • 如果没有匹配的文本则返回

    null

    ,否则返回一个结果数组。

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

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


  • 其中,

    index



    input

    为数组的属性
  • 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 表示的是正则里,第一个小括号捕获到的内容。

思路有了,把它整合成一道算法题,自然不是难事。不足之处,请指正。

扩展资料:


正则表达式匹配重复的字符串[超详细]附完整实例



版权声明:本文为a2013126370原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。