• 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  作用:用来表示前面以匹配的字符或分组的一个引用

    用法示例

    参考文章:[原]AS3 js正则表达式 反向引用(backreference)

    上面说的可能有些拗口,下面给一个例子:

    //一般情况,当我们想匹配任意两个相同的字符(复杂一点就是两个相同的分组)时,往往可以借助下面的写法
    //说明:
    //(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"
  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/caoruiy/p/4413370.html
Copyright © 2020-2023  润新知