博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript正则表达式分组-捕获性分组/非捕获性分组/正则前瞻
阅读量:2357 次
发布时间:2019-05-10

本文共 1025 字,大约阅读时间需要 3 分钟。

捕获性分组 vs. 非捕获性分组

捕获性分组(...)就是捕获分组所匹配的内容暂且存储在某个地方,以便下次使用,捕获性分组以(...)表示,有些地方将取得捕获性分组所匹配结果的过程称之为"反向引用"

非捕获性分组不捕获分组所匹配的内容,当然也就得不到匹配的结果,非捕获性分组以(?:...)表示,在一些只需要分组匹配但是并不需要得到各个分组匹配的结果时,使用非捕获性分组可以提高匹配速度

var now = "25/10/2009";/(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);RegExp.$1; //25RegExp.$2; //10RegExp.$3; //2009now.replace(/(\d\d)\/(\d\d)\/(\d\d\d\d)/,"$3-$2-$1"); //2009-10-25now.replace(/(\d{2})\/(\d{2})\/(\d{4})/,"$3-$2-$1"); //2009-10-25

正则前瞻 vs. 非捕获性分组

正则前瞻(?=)会作为匹配校验,但不会出现在匹配结果字符串里面

非捕获性分组(?:)会作为匹配校验,并出现在匹配结果字符里面,它跟(...)不同的地方在于,不作为子匹配返回。

例如:

var data = 'windows 98 is ok';data.match(/windows (?=\d+)/);  // ["windows "]data.match(/windows (?:\d+)/);  // ["windows 98"]data.match(/windows (\d+)/);    // ["windows 98", "98"]

非捕获性分组定义子表达式可以作为整体被修饰但是子表达式匹配结果不会被存储。

非捕获性分组通过将子表达式放在"?:"符号后。

var str_img = "img1.jpg,img2.jpg,img3.bmp";var reg = /(?:\w*)(?=\.jpg)/g;var arr_m = str_img.match(reg);//arr_m = [ 'img1', '', 'img2', '' ]var reg2 = /(?:\w*)(?:\.jpg)/g;var arr_m2=str_img.match(reg2); //arr_m2=[ 'img1.jpg', 'img2.jpg' ]

转载地址:http://bojtb.baihongyu.com/

你可能感兴趣的文章
关于微软的VB和C#:为何Basic需要存在,为何VB如此像C#,为何两者不合并等
查看>>
度量分析之报告信息的四个层次:数据,信息,分析,措施
查看>>
如何将asp.net MVC2项目升级为MVC3项目(微软官方自动升级工具:ASP.NET MVC 3 Application Upgrader )
查看>>
怎样在Razor中使用HtmlHelper(MvcHtmlString)
查看>>
彼得定律与员工职业生涯规划(该提拔谁,职业规划,知人善用)
查看>>
敏捷开发一千零一问系列之十三:故事点好还是人天好?
查看>>
敏捷开发日常跟进系列之四:跟进表
查看>>
敏捷开发免费管理工具——火星人预览之一:需求与故事树
查看>>
敏捷开发免费管理工具——火星人预览之二:编辑故事,产品管理,组织结构
查看>>
敏捷开发免费管理工具——火星人预览之三:迭代,计划会,分配
查看>>
敏捷开发免费管理工具——火星人预览之四:故事板,燃尽图,我的工作项
查看>>
敏捷开发免费管理工具——火星人预览之五:常见问题问答
查看>>
CSDN10大博客栏目火热评选中
查看>>
敏捷开发团队管理系列之五:大型研发团队的切分(刚参加3.17 MDP团队管理场次的读者请看)
查看>>
敏捷开发免费管理工具——火星人预览之六:我的空间,我的通知
查看>>
敏捷开发一千零一问系列之十四:敏捷开发加班吗?
查看>>
jqueryui 1.8.19引用顺序(及var basePrototype = new base()错误)
查看>>
火星人敏捷开发手册2012-04-30新增敏捷日常跟进内容
查看>>
敏捷开发一千零一问系列之二十:怎样持续改进?(兼谈共振)
查看>>
敏捷开发一千零一问系列之二十一:外部教练还是外部教练?(敏捷开发改进的主体问题)
查看>>