JavaScript 正则表达式完整语法指南:定义、元字符与高级用法
正则表达式是 JavaScript 处理字符串的强大工具。本文总结了其定义方法、元字符、特殊符号及修饰符等核心语法的详细规则与应用场景,助力开发者高效编写正则。
正则表达式的定义与版本差异
在 JavaScript 中,定义正则表达式主要有两种方式:
- 字面量定义:
var re = /正则规则/;。这是最常用的方式。 - 构造函数定义:
new RegExp('正则规则', '修饰符')。
尽管两者最终都指向 RegExp 对象,但在不同 ECMAScript 版本中表现略有不同。例如在 ES5 中,每次执行字面量定义的函数都会生成新的 RegExp 对象,避免了 ES3 中可能存在的状态共享隐患(即修改一个实例会影响其他调用处)。
1. 直接量字符与转义序列
正则匹配通常包含普通字符和特殊控制字符。非字母字符需通过反斜杠 \ 进行转义或表示特定含义:
\o:NUL 字符 (\u0000)\t:制表符 (\u0009)\n:换行符 (\u000A)\v:垂直制表符 (\u000B)\f:换页符 (\u000C)\r:回车符 (\u000D)\xnn:十六进制数 nn 指定的拉丁字符(如 \x0A 等价于 \n)\uxxxx:十六进制数 xxxx 指定的 Unicode 字符(如 \u0009 等价于 \t)\cX:控制字符 ^X(如 \cJ 等价于换行符 \n)
以下标点符号具有特殊含义,需使用 \ 转义:^ $ . * + ? = ! : | \ / ( ) { } [ ]。
2. 字符类匹配
字符类用于简化常见字符集合的书写:
[...]:方括号内的任意字符。[^...]:不在方括号内的任意字符(取反)。.:除换行符外的任意字符。\w:ASCII 字母、数字及下划线,等价于[a-zA-Z0-9_]。\W:非 ASCII 单词字符,等价于[^a-zA-Z0-9_]。\s:任何 Unicode 空白符(空格、制表符、换行等)。\S:非 Unicode 空白符字符。注意区分\w与\S的定义域。\d:任何 ASCII 数值,等价于[0-9]。\D:除了 ASCII 数字之外的任何字符,等价于[^0-9]。[\b]:退格直接量(特例,单独使用时表示边界,在括号内表示退格)。
3. 重复次数与控制贪婪模式
量词用于指定匹配出现的次数,默认情况下正则表达式采用贪婪匹配:
?:0 次或 1 次。+:1 次或多次。*:0 次或任意次。{n}:恰好 n 次。{m,n}:最少 m 次,最多 n 次。{n,}:n 次或 n 次以上。
非贪婪匹配:在量词后加 ? 可使其变为非贪婪(尽可能少地匹配)。例如 [a+?b+?] 在匹配 aaabb 时,会优先尝试最短匹配而非最长匹配。但需注意,正则引擎仍会从字符串开头寻找第一个可能的匹配位置。
4. 选项、分组与后向引用
- 选项
|:分隔可选内容,如(ab|cd)。匹配顺序为从左到右,一旦左侧匹配成功,右侧不再尝试,即使右侧更优。 - 分组
():- 将子表达式打包,可对其应用量词或逻辑操作(如
/java(script)?/)。 - 捕获与引用:圆括号内的内容会被捕获,可通过
\1,\2... 引用前面的子表达式。例如/(['"])[a-z]\1/可匹配前后引号一致的内容(如'abc'或"abc")。
- 将子表达式打包,可对其应用量词或逻辑操作(如
5. 锚点与断言
用于限定匹配发生的位置:
^:匹配字符串开头或行的开头(多行模式下)。$:匹配字符串结尾或行的结尾(多行模式下)。\b:单词边界(位于\w与\W之间)。\B:非单词边界。(?=p):零宽正向先行断言,要求后面紧跟 p,但不消耗 p 的字符。(?!p):零宽负向先行断言,要求后面不紧跟 p。
6. 常用修饰符
修饰符写在正则表达式字面量末尾(/pattern/modifiers):
i:忽略大小写。g:全局匹配。找到所有匹配项,而不是找到第一个就停止。m:多行模式。使^和$匹配每一行的开始和结束,而不仅仅是整个字符串的开始和结束。
注意事项:当使用 g 修饰符时,exec() 和 test() 方法会维护 lastIndex 属性。连续调用时会从上次匹配后的位置继续查找。若需从头重新匹配,应手动将 lastIndex 重置为 0。
以上就是 JavaScript 正则表达式完整语法详解的详细内容,更多关于 JavaScript 编程技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













