在 ES11 中,新增了一个非常实用的方法 String.prototype.matchAll()
,用于获取字符串中所有匹配正则表达式的结果。这个方法不仅可以大大简化代码,同时也提高了程序的效率。
语法
String.prototype.matchAll(regexp)
其中,regexp
表示一个正则表达式,可以是普通正则表达式也可以是一种具有命名捕获组的正则表达式。
返回值
这个方法返回一个迭代器,每个迭代结果都是一个数组。如果没有匹配到任何结果,则返回一个空数组。
这里需要注意,每次调用这个方法都会创建一个新的迭代器对象,所以需要使用 for..of
循环来处理结果。
下面是一个示例代码:
// javascriptcn.com 代码示例 const str = 'Hello world! How are you doing today?'; const regexp = /[^\s]+/g; const matches = str.matchAll(regexp); for (const match of matches) { console.log(match); } // 输出结果 // ["Hello", index: 0, input: "Hello world! How are you doing today?", groups: undefined] // ["world!", index: 6, input: "Hello world! How are you doing today?", groups: undefined] // ["How", index: 13, input: "Hello world! How are you doing today?", groups: undefined] // ["are", index: 17, input: "Hello world! How are you doing today?", groups: undefined] // ["you", index: 21, input: "Hello world! How are you doing today?", groups: undefined] // ["doing", index: 25, input: "Hello world! How are you doing today?", groups: undefined] // ["today?", index: 31, input: "Hello world! How are you doing today?", groups: undefined]
上述示例展示了如何使用 String.prototype.matchAll()
方法来获取字符串中的单词。正则表达式 [^\s]+
表示匹配所有非空白字符。
命名捕获组
可以使用命名捕获组来标识需要匹配的子串。当使用命名捕获组时,返回的结果中将包含这些名称。
下面是一个示例代码:
const str = '2021-05-23'; const regexp = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const matches = str.matchAll(regexp); for (const match of matches) { console.log(match.groups); } // 输出结果 // { year: "2021", month: "05", day: "23" }
上述示例展示了如何使用命名捕获组来获取日期的年、月、日信息。
学习建议
掌握 String.prototype.matchAll()
方法有助于提高前端开发效率和代码质量。建议多花时间练习正则表达式,熟练运用正则表达式能够大大提高开发效率。
指导意义
使用 String.prototype.matchAll()
可以快速获取字符串中的所有匹配结果,大大减少了代码量,并且提高了程序的效率。同时,使用命名捕获组可以方便地获取需要的信息。
总结
ES11 新增了一个非常实用的方法 String.prototype.matchAll()
,用于获取字符串中所有匹配正则表达式的结果。掌握这个方法有助于提高前端开发效率和代码质量。同时,建议多花时间练习正则表达式,熟练运用正则表达式能够大大提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652a97ac7d4982a6ebce1ce9