RegExp

  • 正则基础(基本概念):
  1. 精确匹配(eg: /adc/)
  2. 类匹配(eg: [abc],[^abc],[a-c])
  3. 转义(eg: \/匹配/)
  4. 开头与结尾(eg: ^, $)
  5. 重复匹配(eg: ?,+,*,{n},{n,m},{n,})
  6. 预定义的字符类(eg: \t,\r,\d…)
  7. 组(eg: (abc))
  8. 或(eg: a|b)
  9. 反向引用(eg:如下栗子)
  10. 消极匹配(eg: (?:))

以上加上最基础的创建正则表达式与flag标识符,即组成正则表达式的常用的基础概念。

  • BackReferences反向引用;
    栗子:
    1
    2
    3
    4
    5
    要求:
    匹配xml格式的元素:
    var str='</someTag>something</someTag>';
    正则:
    /<(\w+)>(.+)<\/\1>/

如上的反斜杠后面跟一个数字,\1代表引用第一个小括号里匹配到的pattern(\w+)。即\后面跟一个从1开始的数字,分别代表第几个小括号所匹配的pattern。如果没有反向引用,如何能匹配到这种xml格式呢?

  • String.prototype.match(/reg/g)
    match方法在正则表达式参数的标识符为g时,不会将捕获的子pattern(小括号匹配到的)返回到结果数组里,而是把所有符合整个正则表达式的字符串一一放进去,捕获(capture)到的不会出现在结果中。如果想同时实现,用循环调用RegExp的exec方法

    1
    2
    3
    4
    5
    var str = "<div class='test'><b>Hello</b></div>";
    var reg = /<(\/?)(\w+)([^>]*?)/g,match;
    while(match=tag.exec(str) !== null){
    //每次匹配都可以进行捕获(capture)
    }
  • (?:)消极匹配
    在只是简单用组而无需捕获时(”()”小括号),尽可能的用(?:)取消对组的捕获,这样可以提高性能,减少引擎不必要的运算。

未完待添加…