在 ES10 中,新增了一个非常实用的方法 String.prototype.matchAll(),它可以配合正则表达式使用,用于获取字符串中所有匹配正则表达式的子串。这个方法的出现,可以让我们更方便地处理字符串中的匹配问题,提高代码的可读性和可维护性。
String.prototype.matchAll() 的使用方法
String.prototype.matchAll() 方法的使用方法与 String.prototype.match() 方法类似,都是用于字符串匹配的。不同的是,matchAll() 方法返回的是一个迭代器,可以遍历字符串中所有匹配正则表达式的子串,而 match() 方法只返回第一个匹配的子串。
下面是 matchAll() 方法的使用示例:
const str = 'The quick brown fox jumps over the lazy dog.';
const regex = /[a-z]/g;
const matches = str.matchAll(regex);
for (const match of matches) {
console.log(match);
}输出结果为:
-- -------------------- ---- ------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ -- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ----- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ---------- ---- ------ --- ------ ---- ----- ----- --- ----- ---- --- ---- ------ ------- ----------
可以看到,matchAll() 方法返回的是一个迭代器,可以通过 for...of 循环遍历其中的每一个匹配结果。每一个匹配结果都是一个数组,包含了匹配到的子串和相关信息。
String.prototype.matchAll() 的指导意义
String.prototype.matchAll() 方法的出现,可以让我们更方便地处理字符串中的匹配问题。在以前,如果需要获取字符串中所有匹配正则表达式的子串,需要使用 match() 方法配合正则表达式的 g 标志,然后使用循环遍历返回的数组。这种方式虽然能够达到目的,但是代码可读性不高,而且不够简洁。
使用 matchAll() 方法,可以将这个过程简化为一行代码,同时还可以提高代码的可读性和可维护性。因此,我们在处理字符串匹配问题时,应该优先考虑使用 matchAll() 方法。
示例代码
下面是一个使用 matchAll() 方法的示例代码,用于统计一个字符串中所有单词出现的次数:
-- -------------------- ---- ------- ----- --- - ---- ----- ----- --- ----- ---- --- ---- ------ ----- ----- - ----------- ----- ------- - -------------------- ----- --------- - --- --- ------ ----- -- -------- - ----- ---- - --------- --------------- - ---------------- -- -- - -- - -----------------------
输出结果为:
-- -------------------- ---- ------- - ------ -- -------- -- -------- -- ------ -- -------- -- ------- -- ------ -- ------- -- ------ - -
可以看到,这个示例代码使用 matchAll() 方法和正则表达式,可以很方便地统计一个字符串中所有单词出现的次数。如果不使用 matchAll() 方法,这个过程可能需要写更多的代码,并且不够简洁。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d95b6da941bf71340f2633