zoukankan      html  css  js  c++  java
  • jQuery源码分析之正则表达式

        jQuery源码中多处使用正则表达式处理字符串,现挑选其中部分正则表达式加于研究,以加深对正则表达式的理解,巩固知识。本次涉及到的javascript正则表达式的概念有:组合、选择、引用。

    quickExpr = /^(?:[^#<]*(<[wW]+>)[^>]*$|#([w-]*)$)/;
       该正则表达式匹配以下两种情况:
      (1)html字符串:多个标签selector = '<p><span>正则</span></p>';单个标签selector = '<span>正则</span>';
     (2)以#开头字符串:selector = '#myId';  
    1 match = quickExpr.exec( selector );
      方法exec如果字符串与正则表达式匹配,则返回一个数组,该数组第一个元素为正则表达式所匹配的字符串值。第二个元素开始则是正则表达式的组合所匹配的子字符串值,所谓组合即是用括号括起来的部分,比如(<[wW]+>)([w-]*)(?:)括起来的部分也表示组合但不能引用它所匹配的字符串值,即它括起来的部分匹配的字符串不会放入match数组中,也不能通过RegExp.$索引号或索引号的方式引用。引用的索引号是根据括号从左到右的顺序计算的,比如正则表达/^(?:[^#<]*(<[wW]+>)[^>]*$|#([w-]*)$)/由于(?:)括起来的的组合不能引用,因此(<[wW]+>)的索引号为1,([w-]*)的索引号为2。如果字符串与正则表达式不匹配,则返回null。根据以上分析
    match = quickExpr.exec( selector );执行结果如下:
        第一种情况:
    1  match = ['<p><span>正则</span></p>','<p><span>正则</span></p>',undefined];
    2  match = ['<span>正则</span>','<span>正则</span>',undefined];
        第二种情况:
    1 match = ['#myId',undefined,'myId'];
     rsingleTag = /^<(w+)s*/?>(?:</1>)?$/;
        该正则表达式匹配单个html标签,有以下两种形式:
     (1)有闭合标签:selector = '<span></span>';
      (2)无闭合标签:selector = '<img src="../image.jpg" style="12px;height:12px;border:0;" />';   
    ret = rsingleTag.exec( selector );
        (w+)为第一个组合。(?:</1>)为只组合不引用,与之匹配的字符串不能被引用。1为反向引用,所引用的是第一个组合所匹配的值,这里的意思是必须与第一个组合的匹配的字符串配对,比如与(w+)匹配的字符串是span,则1匹配的字符串必须是span
      根据(一)对exec方法、组合、引用的解释,ret = rsingleTag.exec( selector );的执行结果如下:
     (1)有闭合标签情况:
    ret = ['<span></span>','span'];
      (2)无闭合标签情况:
    ret = ['<img />','img'];
     

     

  • 相关阅读:
    VC++ 读取UTF-8和ANSI编码文件
    Swift中Singleton的实现
    Swift详解之NSPredicate
    swift中的as?和as!
    Swift中的init方法
    Swift属性
    罗列系统中的所有字体
    Swift 中的Range和NSRange不同
    In line copy and paste to system clipboard
    苹果开发者账号那些事儿(一)
  • 原文地址:https://www.cnblogs.com/bender/p/3361094.html
Copyright © 2011-2022 走看看