i、g、m是正则表达式三大关键修饰符:i忽略英文字母大小写;g实现全局匹配,影响match、replace、exec行为;m使^和$匹配每行起始结尾,需配合使用。

正则表达式里的 i、g、m 是最常用也最关键的三个修饰符,它们不改变模式本身,但会显著改变匹配行为。掌握它们,才能让正则真正“按你想要的方式”工作。
i:忽略大小写匹配
加了 i,字母 a 和 A 就不再区分。比如 /hello/i 能同时匹配 "hello"、"Hello"、"HELLO" 甚至 "hElLo"。
- 适合用户输入校验场景,比如登录时判断用户名是否为 "admin",不管用户输的是 "Admin" 还是 "ADMIN"
- 在 JavaScript 中,可写成字面量形式
/abc/i,也可用构造函数new RegExp("abc", "i") - 注意:只影响英文字母,数字、符号、中文不受影响
g:全局匹配
g 的作用是“不满足于第一个匹配”,而是继续往后找,直到字符串结尾。没有它,默认只找第一个就停。
- 对
match()方法至关重要:不加 g,只返回第一个匹配项(数组长度为 1);加了 g,才返回所有匹配项组成的数组 -
replace()必须加 g 才能替换全部,否则只换第一个 -
exec()加了 g 后,多次调用会依次返回每个匹配,内部维护 lastIndex 指针;不加 g,每次调用都从头开始,永远返回第一个
m:多行模式
m 不是让正则“跨多行去匹配一个东西”,而是重新定义 ^ 和 $ 的含义——它们不再只锚定整个字符串的开头和结尾,而是也能匹配每行的起始和结束位置(即换行符 \n 的前后)。
- 典型用途:处理多行文本时提取每一行开头或结尾的内容,比如匹配每行以 "ERROR" 开头的日志
- 示例:
/^ERROR/m在字符串"INFO: ok\nERROR: timeout\nWARN: retry"中能匹配第二行的 "ERROR" - 单独用 m 没效果,必须配合 ^ 或 $ 才体现价值;它不影响 .、\s 等元字符的行为
组合使用更常见
实际开发中,这三个修饰符经常两两或三者一起用:
-
/abc/ig:忽略大小写 + 全局查找,比如统一替换文档中所有拼写变体 -
/^id:\s*(\d+)/mg:多行模式下,每行找以 "id:" 开头的数字,适合解析配置块 -
/[a-z]+/igm:在大段混合大小写的文本中提取所有英文单词(含换行)











