第 3 课

修饰符与匹配模式

全局、忽略大小写、多行、dotAll 与 Unicode 匹配。

修饰符(flags)改变引擎 如何扫描输入——而不是字符本身的含义。在 JavaScript 中,修饰符写在闭合 / 之后,或作为 new RegExp(pattern, flags) 的第二个参数。

常见修饰符(JavaScript)

修饰符名称作用
gglobal查找全部匹配,而非仅第一个
iignore caseA 可匹配 a
mmultiline^$ 匹配行边界,不限于整串首尾
sdotAll. 可匹配换行
uUnicode支持 \u{...} 与部分属性转义
ysticky仅在 lastIndex 处匹配(高级迭代)

其他语言有类似开关(如 re.IGNORECASE(?i) 等),名称与细节略有不同。

全局匹配很重要

没有 g 时,String.prototype.match 与许多 exec 循环会在第一次命中后停止。日志解析与高亮工具几乎都需要 全局 模式,或显式迭代。

注意 有状态的正则对象:带 gRegExp 会更新 lastIndex。若在不同字符串间复用同一实例且未重置,可能漏匹配。

多行日志

日志文件有多行。启用 m 后,^ERROR 匹配 ERROR 开头 的行,这通常是期望行为。无 m 时,^ 往往只表示整段文本的最开头。

g 组合可在粘贴内容中找到所有错误行。

dotAll 与粘贴内容

用户输入和 JSON 字符串可能含 \n。默认 . 不过行;s(dotAll)允许 . 跨行——在「匹配到闭合标记前的一切」的模式中有用,但要接受 过度匹配 的风险。

Unicode 与国际化文本

姓名、城市、slug 可能含非 ASCII 字母。u 修饰符让 JavaScript 正确处理代理对与 \p{...} 属性类。

缺少 Unicode 意识时,\w 可能漏掉国际化应用中的合法字符。

要点

当模式「一行能对、整文件不对」时,先查 修饰符——尤其是 gms,再检查锚点与贪婪性。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览