Node.js正则提取全部匹配项生成数组仅返回第一条如何解决
问题原因
String.prototype.match()方法如果接收字符串作为参数,会自动将其转换为不带全局匹配标志的正则表达式,因此只会返回第一个匹配结果。- 正则表达式需要显式添加
g(全局匹配)标志,才能检索到所有符合规则的匹配项。 - 你在regex101测试时开启了全局匹配开关,所以能得到多个结果,和本地代码逻辑不一致。
修正方案
直接使用带g标志的正则字面量替换字符串参数即可,额外添加可选链和空值合并逻辑避免无匹配结果时抛出异常:
let textRegex = "This is a test: %{00000} This is the name: %{00003} . This is the description: %{00001}"; // 正则中{属于特殊字符,建议转义保证兼容性,添加g标志开启全局匹配 let arrayRegex = textRegex.match(/%\{[0-9]{5}\}/g)?.map(String) ?? [];
运行上述代码后,arrayRegex的输出结果为["%{00000}", "%{00003}", "%{00001}"],完全符合预期。
内容的提问来源于stack exchange,提问作者Sergio García
相关产品推荐
相关产品推荐

