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

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

 

标题 详解JavaScript正则表达式之分组匹配及反向引用
内容
    这篇文章主要介绍了详解JavaScript正则表达式之分组匹配及反向引用 的相关资料,需要的朋友可以参考下
    语法
    元字符:(pattern)  作用:用于反复匹配的分组
    属性$1~$9  如果它(们)存在,用于得到对应分组中匹配到的子串 
    \1或$1  用于匹配第一个分组中的内容
    \2或$2  用于匹配第一个分组中的内容
    ...
    \9或$9  用于匹配第一个分组中的内容
    用法示例
    var reg = /(A+)((B|C|D)+)(E+)/gi;//该正则表达式有4个分组
    //对应关系
    //RegExp.$1 <-> (A+)
    //RegExp.$2 <-> ((B|C|D)+)
    //RegExp.$3 <-> (B|C|D)
    //RegExp.$4 <-> (E+)
    以上的代码也同时给出了$1~$9的用法
    $1~$9是正则表达式预定义的静态属性,通过RegExp.$1引用
    分组嵌套关系说明
    上述代码也可以说明分组的嵌套关系
    //测试环境 Chrome浏览器
    var str = "ABCDE";
    var reg = /(A+)((B|C|D)+)(E+)/gi;
    str.match(reg);//输出:["ABCDE"]
    reg.exec(str,'i');//输出:["ABCDE", "A", "BCD", "D", "E"]
    RegExp.$1;//输出:"A"
    RegExp.$2;//输出:"BCD"
    RegExp.$3;//输出:"D"
    RegExp.$4;//输出:"E"
    这样就可以很明白的看出分组的嵌套关系了
    总结来说:大的分组中存在小的分组时,小的分组是排在该大分组后面的分组,以此类推
    第二部分
    这部分主要讲解类似于"\1"这个东西的用法
    分组匹配之反向引用
    语法
    元字符 \1~\9  作用:用来表示前面以匹配的字符或分组的一个引用
    用法示例
    上面说的可能有些拗口,下面给一个例子:
    //一般情况,当我们想匹配任意两个相同的字符(复杂一点就是两个相同的分组)时,往往可以借助下面的写法
    //说明:
    //(\w)用来匹配任何除了换行和制表符的字符, 而\1是对(\w)的一个引用, 所以你可以理解成: (\w)\1 就是(\w)(\w)
    //但是,
    //(\w)\1 和 (\w)(\w)的不同之处在于, (\w)(\w)表示任意两个连续的字符, 比如Ac, MM, K9, 都可以,
    // 但(\w)\1只能是AA, CC, 99 这样连续相同的字符
    //所以, 你可以这样理解, \1 是对(\w)的一个实例化引用, 当(\w) 匹配到A时, \1 被表达成A, 当(\w)匹配9时, \1 被表示成9
    //说了这么多, 可能有些废话, 下面这个例子就很好理解了
    var str = "AA Am 99";
    var reg = /(\w)\1/g;
    str.match(reg);//输出: ["AA", "99"]
    所以, 参照上边我所引用的文章中给出的 "关键字搜索高亮显示的正则表达用法" 的例子, 我给出自己改进的小的DEMO
    虽然这个DEMO没有用到任何的关于反向引用的知识点::>_<::
    //测试环境 Chrome浏览器
    var key = "keywords";//搜索的关键字
    var text = " I am a text, and I have a keywords before this";//待匹配的文本
    var reg = new RegExp("("+key+")","g");
    text.replace(reg,"<span style='color:red'>$1</span>");//输出: " I am a text, and I have a <span style='color:red'>keywords</span> before this"
    下面给大家详细介绍下正则表达式之反向引用
    示例1:
    public static void main(String[] args) { 
     String s="99-3933"; 
     boolean b=Pattern.matches("([\\d])\\1[-]([3])\\1\\2{2}", s); 
     System.out.println(b); 
    }
    反向引用,匹配重复的数字
    ([\d])====>\1
    ([3])====>\2
    示例2:
    public class test { 
     public static void main(String[] args) { 
      String s="99-393399-3933"; 
      boolean b=Pattern.matches("(([\\d])\\2[-]([3])\\2\\3{2})\\1", s); 
      System.out.println(b); 
     } 
    }
随便看

 

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

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/21 15:13:23