📜  ES6 |正则表达式(1)

📅  最后修改于: 2023-12-03 14:41:00.736000             🧑  作者: Mango

ES6 | 正则表达式

正则表达式是一种强大的模式匹配工具,用于在文本中查找、替换和提取指定的字符串。ES6引入了一些新的正则表达式功能,使其处理文本更加简洁和灵活。

改进的正则表达式语法

ES6引入了一些新的语法来改进正则表达式的使用:

  1. 增加了正则表达式的粘性标志 y,用于指定匹配必须从目标字符串的当前位置开始。

    const regex = /foo/y;
    regex.test('foobar'); // true
    regex.test('barfoo'); // false
    
  2. 增加了正则表达式的unicode标志 u,用于正确处理unicode字符和码点。

    /\u{1F4A9}/u.test('💩'); // true
    /foo.bar/u.test('foo\nbar'); // true
    
  3. 引入了新的修饰符 s,使点字符(.)可以匹配所有字符,包括换行符。

    /foo.bar/s.test('foo\nbar'); // true
    
新的正则表达式方法

除了改进的语法,ES6还引入了一些新的正则表达式方法来简化匹配和替换操作:

  1. RegExp.prototype.flags:返回正则表达式的标志字符串。

    const regex = /foo/gi;
    regex.flags; // 'gi'
    
  2. String.prototype.matchAll():返回一个迭代器,按照正则表达式匹配字符串中所有的结果。

    const regex = /t(e)(st(\d?))/g;
    const str = 'test1test2';
    const matches = Array.from(str.matchAll(regex));
    console.log(matches);
    // Result:
    // [
    //   ['test1', 'e', 'st1', '1'],
    //   ['test2', 'e', 'st2', '2']
    // ]
    
  3. String.prototype.replaceAll():将所有匹配正则表达式的子字符串替换为指定的字符串。

    const regex = /foo/g;
    const str = 'foo foo foo';
    const replaced = str.replaceAll(regex, 'bar');
    console.log(replaced); // 'bar bar bar'
    
Unicode 字符属性转义

ES6引入了Unicode字符属性转义,允许在正则表达式中使用更简洁的方式匹配一类特定的字符。

例如,\p{UnicodePropertyName=UnicodePropertyValue} 可以匹配具有特定Unicode属性的字符。

const regex = /\p{Script=Greek}/u;
regex.test('α'); // true
regex.test('a'); // false
总结

ES6为正则表达式带来了许多改进和新增的功能,使其更灵活和易用。改进的语法和新的方法能够简化正则表达式的书写和处理,使程序员能够更高效地进行文本处理。

详细的正则表达式语法和方法请参考 MDN 文档