正则匹配重复字符串

您所在的位置:网站首页 不重复的汉字 正则匹配重复字符串

正则匹配重复字符串

2023-09-24 17:58| 来源: 网络整理| 查看: 265

正则表达式匹配重复的字符串 1.用正则匹配字符串中重复的字符或符号,不限制重复的次数: var str="aabb..ccee!!!"; var reg=/(.)\1+/ig; //获取匹配到的重复的字符串或符号: var str_match=str.match(reg); //结果为:(6) ["aa", "bb", "..", "cc", "ee", "!!!"] //把匹配到的重复的字符串或符号替换为单一的: var str_replace=str.replace(reg,"$1"); //结果为:ab.ce!

在上面的代码里: == \1 表示的是正则里,第一个小括号捕获到的内容。==

2.匹配类似“ABBB”结构的字符串:

也就是以一个字符开头,后面跟着几个不同的重复的字符,如 abb,cdd,egggg等。

var str="AbbbCdd+!!"; var reg=/(.)(?!\1)(.)\2+/ig; //获取符合“ABBB”结构的内容: var str_match=str.match(reg); //结果为:(3) ["Abbb", "Cdd", "+!!"] //如果要把重复的字符串替换成一个,还要用上面的正则,不能用这里的正则: var str_replace=str.replace(/(.)\1+/ig,"$1"); //结果为:AbCd+!

(?!n) 是正则里的一个“语法结构”,是非获取匹配,表示"负向预查",意思就是说"后面不能…",并且不捕获这个小括号匹配到的内容。

类似的用法还有:(?:n) 、 (?=n) ,更详细的内容,可以看这篇文章,里面有具体的实例,解释的很清楚:

jquery正则中问号的三种[说四种那是忽悠人]用法详解及在线实例演示

(.)(?!\1)(.)\2+ :用直白的话来解释,就是匹配一位任意字符,它的后面不是和它相同的字符,再后面是任意一个重复一次或多次的字符。

3.匹配指定位数的重复:

比如,我们要匹配手机号中间四位相同的手机号:

var str="17788888234"; var reg=/1\d{2}(\d)\1{3}(?!\1)\d{4}/gi; document.write(reg.test(str));

下面,来详细解析一下这个正则:1\d{2}(\d)\1{3}(?!\1)\d{4}

手机号都是以1开头的,所以第一位就是1

\d{2} 表示两位数字,

(\d) 表示一位数字,用小括号括起来表示“捕获”,捕获后,可以用“\1”"\2"来引用,

\1{3} 表示捕获第一个用小括号括起来的内容,并且重复三次,综合起来就是四个连续相同的数字。

(?!\1) 这是正则里的一个“语法”,小括号不表示“捕获”,详细的可以看上面的那个实例。这一句表示后面的数字不能和前面捕获的数字相同。

4.匹配不能重复:

上面说了正则里和“重复”或“相同”相关的内容,下面再来说说正则里“禁止重复”“不能相同”的情况:

实例1:判断数字是否为六位不同的数字组成的数字:

简单的说,就是组成数字的六位数字,都必须为不同的数字,不能有相同的数字。

var str="123465"; var reg=/^(?!\d*?(\d)\d*?\1)\d{6}$/gi; document.write(reg.test(str));

下面来讲解分析下上面这个正则: ^(?!\d*?(\d)\d*?\1)\d{6}$

^ 表示开头;

(?!) 是正则里的一个“语法结构”,表示“断言后面不是…”的意思;

\d*?(\d)\d*?\1 这一句是难点,表示“重复的数字”的意思,用语法来详细解释的话,还真不好解释,因为这一句的逻辑性太强,我试着来解释下吧:

我们把它分开看,\d*?(\d)\d*? 这一句,表示不定位数的数字,

\d表示一个数字,

*表示0或多次,

?表示零或一次,

*? 也可以合在一起解释为 匹配零或多次,但尽可能少匹配。

\d*? 合在一起,意思就是“空”或者任意位数的数字。

(\d) 上面说过,就是匹配一位数字,并用括号捕获,

所以综合起来看的话,\d*?(\d)\d*? 这一句几乎可以匹配到任何的数字,但后面再加上 “\1” 后,也就是正则“\d*?(\d)\d*?\1” 表示的意思就是有重复的数字。

比如:121 前两位会被正则 “\d*?(\d)\d*?\1” 红色的部分匹配到,1是捕获到的。

233 前两位会被 “\d*?(\d)\d*?\1” 红色的部分匹配,3是捕获到的。

42313 前四位,会被“\d*?(\d)\d*?\1” 红色的部分匹配,3是捕获到的。 (?!\d*?(\d)\d*?\1) 这一句,综合起来解释的意思就是,设定后面的数字,都是不重复的数字的意思。

摘自 爱jQuery:http://www.aijquery.cn/Html/jqueryjiqiao/181.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3