String.prototype.match

1. 语法

DANGER

str.match(regexp)

参数:

  • regexp:一个正则表达式对象。

返回值:

如果使用 g 标志,则返回与完整正则表达式匹配的所有结果,但不会返回捕获组;如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组。

2. 描述

描述即返回值。

个人在日常开发中常用场景:

  • 尚未使用过。

3. 示例

  • using match

    const str = 'For more information, see Chapter 3.4.5.1';
    const re = /see (chapter \d+(\.\d)*)/i;
    str.match(re);
    
    // logs [ 'see Chapter 3.4.5.1',
    //        'Chapter 3.4.5.1',
    //        '.1',
    //        index: 22,
    //        input: 'For more information, see Chapter 3.4.5.1' ]
    
    // 'see Chapter 3.4.5.1' is the whole match.
    // 'Chapter 3.4.5.1' was captured by '(chapter \d+(\.\d)*)'.
    // '.1' was the last value captured by '(\.\d)'.
    // The 'index' property (22) is the zero-based index of the whole match.
    // The 'input' property is the original string that was parsed.
    
  • using global and ignore case flags with match

    const str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    const re = /[A-E]/gi;
    str.match(re); // ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
    
  • using match with no parameter

    const str = "Nothing will come of nothing.";
    str.match(); // returns [""]
    

String.prototype.matchAll

1. 语法

DANGER

str.matchAll(regexp)

参数:

  • regexp:一个正则表达式对象。

返回值:

一个迭代器。

2. 描述

描述即返回值。

个人在日常开发中常用场景:

  • 初学时使用过。

3. 示例

  • Regexp.exec and matchAll

    const regexp = RegExp('foo[a-z]*','g');
    const str = 'table football, foosball';
    let match;
    
    while ((match = regexp.exec(str)) !== null) {
      console.log(`Found ${match[0]} start=${match.index} end=${regexp.lastIndex}.`);
      // expected output: "Found football start=6 end=14."
      // expected output: "Found foosball start=16 end=24."
    }
    
    const str = 'table football, foosball';
    const matches = str.matchAll(/foo[a-z]*/g);
    
    for (const match of matches) {
      console.log(`Found ${match[0]} start=${match.index} end=${match.index + match[0].length}.`);
    }
    // expected output: "Found football start=6 end=14."
    // expected output: "Found foosball start=16 end=24."
    
  • better access to capturing groups

    const str = 'test1test2';
    const re = /t(e)(st(\d?))/g;
    
    str.match(re); // ["test1", "test2"]
    [...str.matchAll(re)].map(s => s[0]); // ["test1", "test2"]
    

1. 语法

DANGER

str.search(regexp)

参数:

  • regexp:一个正则对象。

返回值:

首次匹配到时的索引,否则返回 -1。

2. 描述

描述即返回值。

个人在日常开发中常用场景:

  • indexOf 无法满足需求时。

3. 示例

  • using search

    const str = "hey JudE";
    const re = /[A-Z]/g;
    const re2 = /[.]/g;
    str.search(re); // returns 4, which is the index of the first capital letter "J"
    str.search(re2); // returns -1 cannot find '.' dot punctuation