
本文专为初学者解析 JavaScript 中以 /.../ 包裹的“神秘语法”——正则表达式(RegExp),阐明其本质、基本写法、常见用途及调试技巧,助你从“看不懂”到“能上手”。
本文专为初学者解析 javascript 中以 `/.../` 包裹的“神秘语法”——正则表达式(regexp),阐明其本质、基本写法、常见用途及调试技巧,助你从“看不懂”到“能上手”。
你在 Codewars 上看到的类似 /|\/\?|/[asd]d++ 这样的代码,不是“乱码”,也不是语法错误,而是 JavaScript 中原生支持的正则表达式字面量(RegExp literal)。它由一对正斜杠 / 包裹,中间是模式(pattern),用于描述、匹配或操作字符串中的特定文本结构。
什么是正则表达式?
正则表达式(Regular Expression,简称 RegExp 或 regex)是一种声明式语言,用于定义字符串的匹配规则。它独立于 JavaScript 存在(广泛应用于 Python、Java、Shell 等语言),但 JS 提供了简洁的原生支持:
- 字面量写法:/pattern/flags(如 /abc/gi)
- 构造函数写法:new RegExp('pattern', 'flags')
✅ 示例对比:
// 字面量方式(推荐用于静态模式)
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// 构造函数方式(适用于动态拼接的模式)
const minLength = 6;
const passwordRegex = new RegExp(`^.{${minLength},}$`);
console.log(emailRegex.test("user@example.com")); // true
console.log(passwordRegex.test("123456")); // true拆解你遇到的“天书”:/|\/\?|/[asd]d++
我们来逐段解析这个看似混乱的表达式(注意:它本身存在语法问题,常是过度简化的示例,但极具教学价值):
立即学习“Java免费学习笔记(深入)”;
/|\/\?|/[asd]d++ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ①② ③④⑤ ⑥⑦
- ① /:开头分隔符
- ② |:正则中的“或”操作符(需在字符组外才有意义;此处若单独出现,表示“空字符串或空字符串”,通常无实际作用)
- ③ \/:转义后的正斜杠 /(因 / 是分隔符,匹配字面量 / 必须写成 \/)
- ④ \?:匹配字面量 ?(? 在正则中本意是“0 或 1 次”,故需反斜杠转义)
- ⑤ |:再次“或”
- ⑥ /[asd]:这是一个字符类(character class),匹配单个字符:a、s 或 d
- ⑦ d++:⚠️ 此处非法! + 是量词(1 次或多次),但 d+ 后再加 +(即 d++)会导致 SyntaxError —— JS 正则不支持嵌套量词。这很可能是用户误写或混淆了其他语言(如 Perl)的扩展语法。
✅ 正确写法应为:/\/\?|[asd]d+/
→ 含义:匹配 / 或 ?,或者 匹配“一个 a/s/d + 一个或多个 d”(如 "add"、"sddddd")
实用技巧与注意事项
-
✅ 标志(flags)很重要:写在末尾,常见有:
- g(global):全局匹配(否则只找第一个)
- i(ignoreCase):忽略大小写
- m(multiline):使 ^ 和 $ 匹配每行起止
-
⚠️ 转义是关键:正则中有约 12 个特殊字符(如 . * + ? ^ $ \ | [ ] ( ) { }),要在字符串中匹配它们本身,必须加 \ 前缀。例如:
/a\.b/ // 匹配 "a.b"(而非 "aab" 或 "acb") /\d+\.\d+/ // 匹配 "3.14159"
-
? 调试建议:
- 使用 regexr.com 或 regex101.com —— 实时高亮、分步解释、测试用例一目了然;
- 在浏览器控制台用 .test()、.match()、.replace() 快速验证:
const str = "Contact: /help?lang=zh"; console.log(str.match(/\/\?|lang=/g)); // ["/", "?", "lang="]
总结
正则表达式不是“Gibberish”,而是一套强大且通用的文本处理工具。初学时被符号吓退很正常,但只需掌握三要素:分隔符 /、模式(含字符类、量词、转义)、标志(g/i/m),配合在线工具反复练习,就能将“天书”转化为精准高效的代码武器。Codewars 高票答案常用正则,正是因为其简洁性——一行胜十行 if-else 字符串判断。现在,是时候把 /.../ 从“恐惧符号”变成你的“模式利器”了。










