在 ES10 中,新增了一个字符串方法 matchAll
,该方法返回一个迭代器,可以用于查找字符串中所有匹配正则表达式的结果。
本文将介绍 matchAll
方法的使用示例、注意事项以及一些实际应用场景。
使用示例
使用 matchAll
方法可以查找字符串中所有匹配正则表达式的结果。下面是一个简单的示例:
const str = 'hello world'; const regex = /\w+/g; for (const match of str.matchAll(regex)) { console.log(match[0]); }
输出结果为:
hello world
在上面的代码中,我们首先定义了一个字符串 str
和一个正则表达式 regex
,然后使用 matchAll
方法查找字符串中所有匹配正则表达式的结果,并使用 for...of
循环遍历所有匹配结果并输出。
注意,matchAll
方法返回的是一个迭代器,如果需要得到所有匹配结果的数组,可以使用 Array.from
方法将迭代器转换为数组:
const str = 'hello world'; const regex = /\w+/g; const matches = Array.from(str.matchAll(regex), match => match[0]); console.log(matches);
输出结果为:
["hello", "world"]
在上面的代码中,我们使用 Array.from
方法将 matchAll
方法返回的迭代器转换为数组,并使用回调函数将匹配结果转换为字符串数组。
注意事项
使用 matchAll
方法需要注意以下几点:
matchAll
方法返回的是一个迭代器,需要使用for...of
或者Array.from
方法来遍历所有匹配结果。matchAll
方法返回的迭代器是惰性求值的,只有在遍历时才会计算匹配结果。matchAll
方法返回的匹配结果包含了匹配的子串、匹配的位置、输入字符串等信息,需要根据实际需求来选择需要的信息。
实际应用场景
matchAll
方法可以用于查找字符串中所有匹配正则表达式的结果,可以应用于很多实际场景中。下面是一些使用 matchAll
方法的实际应用场景:
- 统计字符串中单词出现次数
-- -------------------- ---- ------- ----- --- - ------ ----- ------- ----- ----- - ------- ----- --------- - --- ------ --- ------ ----- -- -------------------- - ----- ---- - --------- ----- ----- - ------------------- -- -- ------------------- ----- - --- - -----------------------
输出结果为:
Map(2) {"hello" => 2, "world" => 1}
在上面的代码中,我们使用 matchAll
方法和 Map
对象统计了字符串中每个单词出现的次数。
- 生成 URL 查询参数字符串
const params = { foo: 'bar', baz: 'qux' }; const queryString = Object.entries(params) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) .join('&'); console.log(queryString);
输出结果为:
foo=bar&baz=qux
在上面的代码中,我们使用 Object.entries
方法将参数对象转换为键值对数组,然后使用 Array.map
方法将键值对数组转换为 URL 查询参数字符串,并使用 Array.join
方法将字符串数组合并为一个字符串。
总结
matchAll
方法是 ES10 中新增的字符串方法,可以用于查找字符串中所有匹配正则表达式的结果。使用 matchAll
方法需要注意迭代器的惰性求值和匹配结果的信息,可以应用于很多实际场景中,如统计字符串中单词出现次数和生成 URL 查询参数字符串等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65c86e32add4f0e0ff240d1c