网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 javascript正则表达式中分组详解
内容
    这篇文章主要介绍了javascript正则表达式中分组的相关资料,包括捕获性分组和非捕获性分组,需要的朋友可以参考下
    分组在正则中用的还是比较广的,我所理解的分组 就是一对括号() ,每一对括号 就代表了一个分组,
    分组可以分为:
    捕获性分组
    非捕获性分组
    捕获性分组
    捕获性分组会在 比如 match exec这样的函数中以第二项,第三项的形式得到相应分组的结果。先来看一个例子吧
    var reg = /test(\d+)/;
     var str = 'new test001 test002';
     console.log(str.match(reg));
    //["test001", "001", index: 4, input: "new test001 test002"]
    代码中 (\d+)是一个分组(有些人也叫他子模式),但是表示的都是同一个意思,上面的例子中 test001是完全匹配的结果
    然而 分组的匹配是从整个完全匹配结果(也就是test001)中来查找与子模式\d+匹配的字符,这里显然是 001.
    但是今天遇到的情况是这样的
    var reg = /test(\d)+/;
     var str = 'new test001 test002';
     console.log(str.match(reg));
    //["test001", "1", index: 4, input: "new test001 test002"]
    不同之处就是 (\d+) 改为了 (\d)+ ,整个匹配结果还是 test001 但是第一个分组匹配的结果却不同。
    咱们慢慢来分析他们的区别
    (\d+) 这整个是一个分组的情况,由于 默认情况下 匹配模式都是贪婪模式 也就是说尽可能多的去匹配
    所有\d+ 匹配到的结果 是 001 然后 外面添加了一对括号 也就是一个分组,这样第一个分组中匹配的结果就是 001.
    再来看第二个例子中的 (\d)+ 同样这也是一个贪婪模式 首先会先匹配0然后后面是0 也会匹配到 最后是1 同样也匹配到 到此 匹配结束
    看起来跟第一个例子中的匹配没什么区别,但是这里的 分组(\d)表示 匹配单个数字
    按照我之前的理解是 会匹配最开始匹配到的结果 也就是0 但这种理解是错误的。由于整个匹配是贪婪模式,尽可能多的去匹配
    分组中的 (\d) 就会捕获 最后一次匹配到的结果 1
    如果是非贪婪模式 那就会尽可能少的去匹配
    var reg = /test(\d)+?/;
     var str = 'new test001 test002';
     console.log(str.match(reg));
    //["test001", "0", index: 4, input: "new test001 test002"]
    这样(\d)匹配结果就是0了,虽然后面还有能够匹配到的结果,但是这里是尽可能少的去匹配
    非捕获性分组
    var reg = /test(?:\d)+/;
     var str = 'new test001 test002';
     console.log(str.match(reg));
    //["test001", index: 4, input: "new test001 test002"]
    非捕获性分组也就是 有些地方需要用到一对括号,但是又不想让他成为一个捕获性分组也就是不想让这个分组被类似 macth exec 这样的函数所获取到
    通常在括号内部的前面加上?: 也就是 (?:pattern)这样就变成了一个非捕获性分组
    这样 match的结果中就不会出现分组匹配到的内容了 也就是少了 第二项的 1.
    这篇文章着重说明 (\d+)和 (\d)+的区别
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/13 9:31:46