元字符具有特殊含义并改变匹配行为,普通字符则按字面值精确匹配;元字符需用反斜杠转义才能匹配自身,且部分字符(如^、-、])的含义依赖上下文。

在 JavaScript 正则表达式中,元字符和普通字符的核心区别在于:元字符具有特殊含义,会改变匹配行为;普通字符则按字面意思精确匹配自身。
元字符:有“魔法”的符号
元字符(如 ^、$、.、*、+、?、d、w、[ ]、( ) 等)不表示自身,而是代表某种匹配规则或位置逻辑。例如:
- . 匹配除换行符外的任意单个字符(不是点号本身)
- ^ 表示字符串开头(在非字符组中),$ 表示结尾
- d 等价于 [0-9],匹配任意数字
- * 表示前一项可出现零次或多次(贪婪量词)
普通字符:老老实实“照本宣科”
字母、数字、空格、标点等大多数字符默认是普通字符,正则引擎直接按其字面值去匹配。比如:
- 写 /hello/ 就只匹配连续的 h-e-l-l-o 字母
- /2024/ 只匹配字符串中连续出现的 "2024"
- 空格 就匹配一个实际空格,不是“忽略空白”
如何让元字符变“普通”?用反斜杠转义
当需要匹配元字符本身的字面值时,必须用 进行转义:
立即学习“Java免费学习笔记(深入)”;
- 想匹配句号 .?写成 .
- 想匹配美元符号 $?写成 $
- 想匹配反斜杠本身?得写两个:\
- 注意:在字符串字面量中,反斜杠本身也要被 JS 解析一次,所以 new RegExp("\.") 才等价于 /./
有些字符“身份模糊”,取决于上下文
同一个字符可能在不同位置扮演不同角色:
- ^ 在字符组开头(如 [^abc])表示“非”,在表达式开头(如 ^abc)表示“行首”
- - 在字符组内且不在开头/结尾(如 [a-z])表示范围,在开头(如 [-abc])就只是普通连字符
- ] 在字符组开头(如 []abc])是普通字符,其他位置通常是闭合符
理解这个区别,是写出准确正则的前提——该转义时不漏掉,该发挥功能时不误加反斜杠。










