JavaScript中如何使用正则标志?

来源:Golang编程网作者:上海GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《JavaScript中如何使用正则标志?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JavaScript中如何使用正则标志?》有用,将其分享出去将是对创作者最好的鼓励。

JavaScript中的正则标志是附加在正则表达式后面的字母,用来调整正则的匹配规则,常见的标志包括g、i、m、s、u、y等,不同的标志对应不同的匹配行为,合理搭配标志可以满足多样化的匹配需求。

JavaScript中如何使用正则标志?

正则标志的作用与分类

正则标志不需要写在正则表达式的主体内容中,而是作为附加参数存在,能够全局改变正则的匹配逻辑。JavaScript目前支持的正则标志及对应含义如下:

标志名称作用说明
g全局匹配找到第一个匹配项后不停止,继续匹配后续所有符合规则的内容
i忽略大小写匹配时不区分英文字母的大小写,比如a和A会被视为相同
m多行匹配让^和$能够匹配字符串中每一行的开头和结尾,而不是整个字符串的开头和结尾
sdotAll模式让.能够匹配包括换行符在内的所有单个字符,默认情况下.不能匹配换行符
uUnicode模式启用Unicode匹配,能够正确匹配4字节的Unicode字符,比如emoji表情
y粘性匹配从正则对象的lastIndex属性指定的位置开始匹配,且必须连续匹配成功

两种正则定义方式下添加标志的方法

字面量方式添加标志

使用正则字面量定义正则表达式时,标志直接跟在最后一个斜杠后面,多个标志可以连续写在一起,不需要分隔符。

// 全局匹配+忽略大小写,匹配字符串中所有的hello(不区分大小写)
const reg1 = /hello/gi;
const str1 = "Hello world, hello JavaScript, HELLO test";
const result1 = str1.match(reg1);
console.log(result1); // 输出 ["Hello", "hello", "HELLO"]

// 多行匹配,匹配每一行开头是a的内容
const reg2 = /^a/gm;
const str2 = "a first linenb second linena third line";
const result2 = str2.match(reg2);
console.log(result2); // 输出 ["a", "a"]

RegExp构造函数方式添加标志

使用RegExp构造函数创建正则表达式时,第二个参数就是标志字符串,多个标志直接拼接即可。

// 定义全局匹配+dotAll模式的正则,匹配所有字符包括换行符
const reg3 = new RegExp("h.llo", "gs");
const str3 = "hnllo worldnhallo test";
const result3 = str3.match(reg3);
console.log(result3); // 输出 ["hnllo", "hallo"]

// 粘性匹配示例,从指定位置开始匹配
const reg4 = new RegExp("ab", "y");
const str4 = "ab abc ab";
reg4.lastIndex = 0;
console.log(reg4.test(str4)); // 输出 true,从0位置匹配到ab
reg4.lastIndex = 3;
console.log(reg4.test(str4)); // 输出 false,3位置是空格,无法连续匹配ab

标志使用的注意事项

首先,不是所有标志都可以随意组合,比如粘性匹配y和全局匹配g同时使用时,y的优先级更高,匹配行为会遵循y的规则。其次,使用RegExp构造函数时,如果第一个参数是字符串,里面的反斜杠需要转义,比如要匹配数字d,需要写成"\d"。另外,添加了全局标志g的正则,每次匹配后lastIndex会更新,重复使用同一个正则对象时需要注意重置lastIndex,否则可能出现匹配结果不符合预期的情况。

const reg5 = /test/g;
const str5 = "test test test";
console.log(reg5.test(str5)); // 输出 true,lastIndex变为4
console.log(reg5.test(str5)); // 输出 true,lastIndex变为9
console.log(reg5.test(str5)); // 输出 false,lastIndex变为13,超出字符串长度
// 重置lastIndex后重新匹配
reg5.lastIndex = 0;
console.log(reg5.test(str5)); // 输出 true

实际场景中的标志搭配示例

在实际开发中,经常需要组合使用多个标志来满足需求,比如需要提取HTML字符串中所有的标签名,并且不区分大小写,就可以同时使用g和i标志。

// 匹配所有HTML标签,不区分大小写,全局匹配
const reg6 = /<([a-z]+)>/gi;
const str6 = "<Div>content</div><SPAN>test</SPAN>";
const tags = str6.match(reg6);
console.log(tags); // 输出 ["<Div>", "</div>", "<SPAN>", "</SPAN>"]

JavaScript正则表达式正则标志RegExp修改时间:2026-06-17 01:51:16

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。