正则表达式是javascript字符串处理的底层基础设施,通过边界控制(^、$、\b)、元字符(\d、\w、\s等)、量词与分组(+、*、()等)及方法选型(test、match、replace等)实现精确、可复用的字符串匹配与替换。

正则表达式不是“高级技巧”,而是 JavaScript 字符串处理的底层基础设施。它把模糊的“找什么”“换哪里”“是不是这样”变成可复用、可验证、可嵌入逻辑的精确规则。
边界控制:让匹配不“滥竽充数”
很多误匹配,根源在于没锁住位置。比如验证手机号,/1[3-9]\d{9}/ 会把 "abc13812345678def" 也判为合法——因为它只是“包含”了11位手机号,而非“就是”手机号。
- 加
^锁开头:/^1[3-9]\d{9}$/才表示整个字符串必须严格符合 -
^$成对出现,才是完整校验的标配 -
\b匹配单词边界,适合替换独立单词(如把"cat"替成"dog",但不碰"scatter")
元字符组合:少写代码,多做判断
不用罗列所有数字或字母,靠元字符就能覆盖一类字符:
-
\d等价于[0-9],\w包含字母、数字、下划线 -
\s匹配空格、制表符、换行符,清洗多余空白时比.replace(/\s+/g, ' ')更可靠 -
.默认不匹配换行符,需要跨行匹配时得加s标志(/pattern/s) - 否定类写法更高效:
\D(非数字)、\W(非单词字符)、[^a-z](非小写字母)
量词与分组:从“单个字符”到“结构化提取”
真正体现正则威力的,是描述重复和结构的能力:
-
+(至少一次)、*(零或多次)、?(零或一次),配合贪婪/惰性模式(??、+?)可精准控制匹配长度 - 用
()分组后,match()或exec()返回的结果里,result[1]就是第一组捕获的内容 - 模板解析常用:
/\{\{\s*(\w+)\s*\}\}/g能提取{{userId}}中的userId - 非捕获分组
(?:...)只分组不记录,节省内存且避免索引错位
方法选型:不同场景用对 API
正则本身是模式,真正干活的是字符串方法:
-
test():只关心“有没有”,返回布尔值,表单校验首选 -
match():返回所有匹配项数组,带g标志才全量;无g时返回带捕获组的详细对象 -
replace():支持字符串或函数作为替换值,函数参数可拿到分组内容,实现动态替换 -
matchAll():ES2020 新增,返回迭代器,适合处理复杂嵌套结构(如解析{{a}}text{{b}}并保留中间文本)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











