在 ES11 中,JavaScript 增加了 matchAll() 函数,该函数用于在字符串中匹配所有与正则表达式模式匹配的字符串。它是 String.prototype 上的一个新的方法,我们可以使用它来获取所有匹配字符串的详细信息。本文将介绍 matchAll() 函数的语法、使用方法和示例。
matchAll() 函数的语法
matchAll() 函数的语法如下:
string.matchAll(regexp)
其中,string 是要匹配的字符串,regexp 是正则表达式。该函数返回一个迭代器(Iterator),我们可以使用 for...of 循环迭代器来访问匹配结果。
matchAll() 函数的使用方法
使用 matchAll() 函数,我们可以获取每个匹配项的详细信息,包括匹配字符串、子字符串、索引和组(capture groups)。以下是获取匹配字符串和索引的示例:
const str = 'ES11 新特性 matchAll() 函数'; const regex = /\b\w+\b/g; for (const match of str.matchAll(regex)) { console.log(match[0]); // 匹配的字符串 console.log(match.index); // 匹配的索引 }
上面这个示例将匹配所有单词,并输出它们的字符串和索引。
除了匹配字符串和索引,我们还可以获取子字符串和组(捕获组)的信息。以下是获取子字符串和组信息的示例:
-- -------------------- ---- ------- ----- --- - ----- --- ---------- ---- ----- ----- - ---------- ---------- --- ------ ----- -- -------------------- - ---------------------- -- ------ ---------------------- -- ------- ---------------------- -- ------- ---------------------- -- ---- -
上面这个示例将匹配两个单词和一个空字符,并输出它们的字符串、两个子字符串和一个组。
matchAll() 函数的示例
以下是一些 matchAll() 函数的示例,它们可以帮助你更好地了解该函数的使用方法和场景。
示例 1:匹配所有数字并求和
-- -------------------- ---- ------- ----- --- - -- - --- ----- ----- - ------- --- --- - -- --- ------ ----- -- -------------------- - --- -- ----------------- - ----------------- -- -- -
示例 2:匹配所有单词并统计出现次数
-- -------------------- ---- ------- ----- --- - ----- --- ---------- -- ------ ----- ----- - ----------- ----- ---------- - --- ------ --- ------ ----- -- -------------------- - ----- ---- - --------- -- ---------------------- - -------------------- -------------------- - --- - ---- - -------------------- --- - - ------------------------ -- -- ------ ------- -- -- ----- -- -- ---------- -- -- ---- -- --
示例 3:从 HTML 中提取链接
const html = '<a href="https://www.example.com">Example</a>'; const regex = /<a href="(.+)">(.+)<\/a>/g; for (const match of html.matchAll(regex)) { console.log(match[1]); // 链接 console.log(match[2]); // 文字 }
上面这个示例将从 HTML 中提取链接和文字内容。
总结
使用 matchAll() 函数,我们可以轻松地获取所有匹配字符串的详细信息,并在实际应用中发挥作用。当您需要解析复杂文本时,该函数将非常有用。希望本文能够帮助您更好地了解 matchAll() 函数的使用方法和场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647f015348841e9894eb22ca