Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

String-search_match

  • search 不执行全局匹配(忽略标志 g),也没有 lastIndex 属性(总是从开始位置查找)
  • 返回第一个找到的索引
    字符串.search(子字符串);
    
    字符串.search(非全局RegExp表达式);
    
  • 还不如用 indexOf,还能补充 lastIndex 属性

2. match

  • match 可执行全局匹配,返回一个数组,存放着匹配的结果
  • 有以下三种参数(子字符串/非全局/全局)

【1】子字符串

字符串.match(子字符串);
  • 例子
    let str = "web2.0 .net2.0";
    let searchValue = "e";
    let result = str.match(searchValue);
    console.log(result); //见返回值
    
    • 返回值
      Array[1]
          0:"e"
          index: 1
          input: "web2.0 .net2.0"
      
      • 分三项 第一项:表示匹配到的字符串; 第二项:属性 index,表示匹配字符串所在的位置 第三项:属性 input,表示输入的字符串
    • 分析:方法和 indexOf 一样

【2】非全局 RegExp 对象

字符串.match(非全局RegExp对象);
  • 例子

    let str = "web2.0 .net2.0";
    let pattern = /(\w+)(\d).(\d)/; //没有全局标志g
    let result = str.match(pattern);
    console.log(result); //见返回值
    console.log(result[1]); //web
    
    • 返回值

      Array[4]
          0:"web2.0"
          1:"web"
          2:"2"
          3:"0"
          index: 0
          input: "web2.0 .net2.0"
          length: 4
      
      • 分四部分

        • 第一部分:表示匹配到的字符串结果组(0-3)

          • 0:web2.0,与整个模式匹配的结果,也就是与/(\w+)(\d).(\d)/匹配的结果;
            • 后面的 3 个均为子匹配结果,均可通过 result[索引]来获取
          • 1:web,与第一个匹配组匹配的结果,也就是与(\w+)匹配的结果;
          • 2:2,与第二个匹配组匹配的结果,也就是与(\d)匹配的结果;
          • 3:0,与第三个匹配组匹配的结果,也就是与(\d)(第二个(\d))匹配的结果;
        • 第二部分:属性 index,表示第一个匹配字符串所在位置

          • 可通过 result["index"]或者 result.index 来获取
        • 第三部分:属性 input,表示输入的字符串

        • 第四部分:属性 length,表示数组长

    • 分析:方法和 RegExp 类的 exec()结果一样

【3】全局 RegExp 对象

字符串.match(全局RegExp对象);
  • 例子

    let str = "web2.0 .net2.0";
    let pattern = /(\w+)(\d).(\d)/g; //有全局标志g
    let result = str.match(pattern);
    console.log(result); //见返回值
    console.log(result[1]); //net2.0
    
    • 返回值

      Array[2]
          0:"web2.0"
          1:"net2.0"
          length: 2
      
      • 分两部分
        • 第一部分:表示匹配到的字符串结果组(0-1)
          • 0:web2.0,第一个匹配项,与/(\w+)(\d).(\d)/匹配的结果;
          • 1:net2.0,第二个匹配项,与/(\w+)(\d).(\d)/匹配的结果;
        • 第二部分:属性 length,表示数组长
    • 分析:方法和 exec()有差异如下:

      • exec()方法每次执行时是从上次检索的终点开始检索,返回当前检索到的一个匹配项信息

        • 要靠一次次手动调用,直到 lastIndex 变回 0,才算找完;
        • 同时这也能得到每一次“子匹配结果、index 属性和 input 属性”的完整信息
      • match()方法执行的结果为一个包含所有匹配项的数组

        • 调用一次,只要一次就找完
        • 同时也不会像非全局 match 那样包括匹配的“子匹配结果、index 属性和 input 属性”