最近在做遇到如下的算法题:
    
    
    
    其实这算不上什么算法题,纯属是对正则表达式的应用,在这里我们用JavaScript语法进行实现。在实现之前还是先回顾一下知识点吧,在知道的基础看看能不能写出来!
   
- 
     正则表达式的两个方法
 
 (1)RegExp.prototype.test(str)
用于测试字符串参数中是否存在匹配正则表达式模式的字符串,如果存在则返回
true
,否则返回
false
。
    
    
    (2)RegExp.prototype.exec(str)
   
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。
- 
     如果没有匹配的文本则返回
 
 null
 
 ,否则返回一个结果数组。
exec方法在全局和非全局调用时,是有差别的。两者都会返回一个数组,只是非全局调用仅返回第一次的匹配结果。
- 第一个元素是与正则表达式相匹配的文本;
- 第二元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话);
- 第三个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话),以此类推
- 
     …
 
 其中,
 
 index
 
 、
 
 input
 
 为数组的属性
- index:声明匹配文本的第一个字符的位置;
- 
     input:存放被检索的字符串
 
 string
 
 
   
- 
     字符串的四个正则方法
 
 (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 版权协议,转载请附上原文出处链接和本声明。