📜  解释 ES6 中的 RegExp(1)

📅  最后修改于: 2023-12-03 15:11:57.775000             🧑  作者: Mango

ES6中的RegExp

正则表达式(RegExp)在ES6中得到了很大的改进和增强。以下是ES6中对RegExp的改进:

新的构造函数

ES6引入了新的RegExp构造函数。这个构造函数允许我们进行新的操作,例如匹配Unicode字符。

const regex = new RegExp('\\u{1F3A0}', 'u');
console.log(regex.test('🎠')); // true

该例子创建一个正则表达式,用来匹配Unicode字符"\u{1F3A0}",并提供了选项'unicode'('u'),表示启用Unicode匹配模式。因此,在这个例子中,这个正则表达式将匹配指定的“carousel horse”字符。

新的方法

ES6为RegExp增加了3个新的方法,其中一些对于在字符串中搜索和替换内容的开发者来说很有用。

1. RegExp.prototype.@@matchAll()

该方法可以一次匹配输入字符串中所有的匹配项,并将它们封装在一个可迭代对象中。我们可以使用该对象来查找并使用所有匹配项。

例如,以下代码演示了如何在字符串中查找所有的数字:

const regex = /\d+/g;
const str = '2019-06-01T14:48:00.000Z';
const matches = str.matchAll(regex);
for (const match of matches) {
  console.log(match);
}

在该例子中,我们使用全局标志(g),使RegExp能够继续查找下一个匹配项。最终,我们使用for-of循环遍历了该迭代器,并输出了每个匹配项对象。

2. RegExp.prototype.@@replace()

该方法与JavaScript内置的字符串replace方法类似,但它可以使用正则表达式查找并替换所有的匹配项。在ES6中,我们可以将替换文本作为一个函数传递,该函数可以接收匹配项作为第一个参数,并返回用来替换的字符串。

例如,以下代码演示了如何使用RegExp.replace()方法将所有的数字替换为问号:

const regex = /\d+/g;
const str = '2019-06-01T14:48:00.000Z';
const result = str.replace(regex, () => '?');
console.log(result);

在该例子中,我们使用正则表达式/\d+/g来查找字符串中的所有数字,并将它们替换为问号(?)。

3. RegExp.prototype.@@split()

该方法与JavaScript内置的字符串split方法类似,但它可以使用正则表达式进行分割。在ES6中,我们可以使用分组捕获的语法(:)指定分隔符,并且可以指定返回数组的最大长度。

例如,以下代码演示了如何使用RegExp.split()方法根据所有空白字符分割字符串:

const regex = / +/;
const str = 'hello   world';
const result = str.split(regex);
console.log(result);

在该例子中,我们使用正则表达式/ +/来匹配一个或多个空格字符,并使用它来分割字符串。最终,结果数组包含与字符串中的所有空白字符分割后的词语。

参考文献