正则匹配重复字符串 |
您所在的位置:网站首页 › 不重复的汉字 › 正则匹配重复字符串 |
正则表达式匹配重复的字符串
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 |