Google Apps Script/JavaScript中正则单行匹配生效多行失效是什么原因?
正则跨行匹配失败问题解答
核心原因
- 你正则中匹配两段内容中间部分的自定义字符集
[clastexwid\-."= h<>\/]+没有包含换行符\n,两段内容分行后中间的换行符无法被该字符集匹配,导致匹配中断。 - 你添加的
s修饰符仅作用于元字符.,使其可以匹配换行符,对自定义字符集不生效;同时部分低版本Google Apps Script运行环境对s修饰符的兼容性不足,也可能导致修饰符失效。
修复方案
- 直接在自定义字符集中加入换行符即可适配分行场景,修改后正则为:
/(Laboratory Confirmed Cases )([clastexwid\-."= h<>\/\n]+)([0-9]+)/
- 如需使用更简洁的写法,可配合非贪婪匹配和dotall模式,修改后正则为(适用于支持ES2018的V8版Google Apps Script环境):
/(Laboratory Confirmed Cases )(.+?)([0-9]+)/s
- 如果你使用的是旧版Rhino运行环境的Google Apps Script,可用
[^]替代.实现全字符匹配:
/(Laboratory Confirmed Cases )([^]+?)([0-9]+)/
内容的提问来源于stack exchange,提问作者OneLeif
相关产品推荐
相关产品推荐

