27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
在正则表达式中,通过一对圆括号括起来的内容,我们就称之为“子表达式”。
捕获(分组)
在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,
然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。
在正则语法中,用“\1”来引用前面的捕获(使用子表达式匹配的结果)。用\2表示第二个捕获的内容….
反向引用
在正则表达式中,我们可以使用\n(n>0,正整数,代表系统中的缓冲区编号)
来获取缓冲区中的内容,我们把这个过程就称之为“反向引用”。
匹配连续四个数字,第一和第二数字相同,第三和第四数字相同
var str = '1122 3434 5566 7879 9887'; // var res = str.match(/\d{4}/g); var res = str.match(/(\d)\1(\d)\2/g); // var res = str.match(/(\d)\1(\d)\2/g); console.log(res);// [1122 , 5566]
匹配连续四个数字,第一和第三数字相同,第二和第四数字相同
var res = str.match(/(\d)(\d)\1\2/g); console.log(res); //[3434]
匹配连续四个数字,第一和第三数字相同
var res = str.match(/(\d)\d\1\d/g); console.log(res); //[3434 , 7879]
匹配连续四个数字,第一和第二数字相同,第三和第四数字相同,并将相同的数字只保留一个 1122 5566 12 56
// var res = str.replace(/(\d)\1(\d)\2/g, 'aaaa'); var res = str.replace(/(\d)\1(\d)\2/g, '$1$2'); console.log(res);
禁止反向引用 (?:)
var str = '1122 3434 5566 7879 9887'; var res = str.match(/(?:\d)(\d)\1\d/g); console.log(res); //[9887]
案例1--你好世界
var str = "你好,世界"; var res = str.match(/[\u4E00-\u9FA5]/g); console.log(res);//array["你", "好", "世", "界"] var res = str.match(/[\u4E00-\u9FA5]{1}/g); console.log(res);//["你", "好", "世", "界"] var res = str.match(/[\u4E00-\u9FA5]{2}/g); console.log(res);//["你好", "世界"]
每个字符(中文、英文字母、数字、各种符号、拉丁文、韩文、日文等)都对应着一个Unicode编码。
查看Unicode编码,找到中文的部分,然后获取中文的Unicode编码的区间,就可以用正则匹配了。
前面我们用[a-z]表示小写字母,[0-9]表示数字,这就是一个范围表示,如果有一个数x能够表示第一个中文,有一个数y能够表示最后一个中文,那么[x-y]就可以表示所有的中文了。
中文的Unicode编码从4E00开始,到9FA5结束。
[\u4E00-\u9FA5]这个区间就能够表示中文。
完整的Unicode编码表:http://blog.csdn.net/hherima/article/details/9045861
案例2--解决结巴问题
var str = "今今今天晚晚晚晚晚晚上吃吃吃吃吃吃鸡"; //核心思路, 连续的重复的汉字,保留一个 (字符串替换) var res = str.replace(/([\u4E00-\u9FA5])\1+/g, '$1'); console.log(res);
本站内容均为小米原创,转载请注明出处:小米技术社区>> 正则表达式的捕获(分组)和反向引用以及案例