正则表达式 (Regular Expression) 语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符。
语法
字面量, 构造函数和工厂符号都可以定义一个正则对象
1 2 3 4 5
| /pattern/flags new RegExp(pattern, [flags]) RegExp(pattern, [flags]) //例如 var re = new RegExp(/^\d{3,}$/, ["i"])
|
pattern:正则表达式的文本
flags:修饰符
flags | 描述 |
---|
i | 执行对大小写不敏感的匹配 |
g | 全局匹配(会查找所有匹配结果,不会在查找到第一个匹配后就停止) |
m | 执行多行匹配 |
元字符
定位符 | 描述 |
---|
^ | 匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置 |
$ | 匹配行或字符串的结尾 |
\b | 匹配单词边界,即单词与空格间的位置 |
\B | 匹配非单词边界 |
字符 | 描述 |
---|
\d | 匹配数字 |
\D | 匹配任意非数字的字符 |
\w | 匹配字母,数字,下划线 |
\W | 匹配任意不是字母,数字,下划线的字符 |
. | 匹配除了换行符以外的任何字符 |
( ) | 标记一个子表达式的开始和结束位置,常用于分组,子表达式可以获取供以后使用 |
| | 类似于或运算符,匹配两项之间的一个选择 |
[ | 中括号表达式的开始 |
{ | 限定符表达式的开始 |
\ | 将下一个字符进行转义,要匹配’\d’,请使用’\\d’ |
[abc] | 匹配括号内指定元素的字符,也可以写成 [a-z] 匹配所有小写英文字母 |
[^abc] | 匹配除了abc以外的任意字符 |
非打印字符 | 描述 |
---|
\cx | 匹配由x指明的控制字符,例如 \cM 匹配一个 Control-M 或回车符,x 的值必须为A-Z或a-z之一 |
\f | 匹配一个换页符,等价于 \x0c 和 \cL |
\n | 匹配一个换行符,等价于 \x0a 和 \cJ |
\r | 匹配一个回车符,等价于 \x0d 和 \cM |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等,等价于 [\f\n\r\t\v] |
\S | 匹配任何非空白字符,等价于 [^\f\n\r\t\v] |
\t | 匹配一个制表符,等价于 \x09 和 \cI |
\v | 匹配一个垂直制表符,等价于 \x0b 和 \cK |
贪婪限定符 | 描述 |
---|
* | 匹配前面的子表达式任意次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | 匹配n次( n>0 ) |
{n,} | 至少匹配n次( n>0 ) |
{n,m} | 至少匹配n次且最多匹配m次( m>=n>0 ) |
惰性限定符 | 描述 |
---|
*? | 匹配前面的子表达式任意次,但是尽可能少重复 |
+? | 匹配前面的子表达式一次或多次,但是尽可能少重复 |
?? | 匹配前面的子表达式零次或一次,但是尽可能少重复 |
{n,}? | 至少匹配n次( n>0 ),但是尽可能少重复 |
{n,m}? | 至少匹配n次且最多匹配m次( m>=n>0 ),但是尽可能少重复 |
正则进阶
捕获型 | 描述 |
---|
( abc ) | 匹配abc,并捕获文本到自动命名的组里 |
( ?<name>abc ) | 匹配abc,并捕获文本到名称为name的组里 |
非捕获型 | 描述 |
---|
( ?:x ) | 匹配abc,不捕获匹配的文本,也不给此分组分配组号 |
( ?=x ) | 零宽度正先行断言,仅当子表达式 x 在此位置的右侧匹配时才继续匹配,且此构造不会回溯。例如,/\d+(?=\.)/ 匹配 “3.141” 中数字后面是".“的实例,也就是"3”。 |
( ?!x ) | 零宽度负先行断言,仅当子表达式 x 不在此位置的右侧匹配时才继续匹配,例如,/\d+(?!\.)/ 匹配 “3.141x159” 中数字后面不是".“的实例,也就是"141”。 |
( ?<=x ) | 零宽度正后发断言(ES9已支持),仅当子表达式 x 在此位置的左侧匹配时才继续匹配,且此构造不会回溯,例如,/(?<=\.)\d+/ 匹配 “3.141” 中跟在".“后面的数字实例,也就是"141”。 |
( ?<!x ) | 零宽度负后发断言(ES9已支持),仅当子表达式 x 不在此位置的左侧匹配时才继续匹配,例如,/(?!\.)\d{3}/ 匹配 “3.141x592” 中没有跟在".“后面的三位数字实例,也就是"592”。 |
应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| //匹配手机号 /^1[34578]{9}$/ //验证邮箱 /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+$/ //验证身份证 /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/ //验证用户名 /^[a-zA-Z][a-zA-Z0-9\-\_]{5,15}$/ //验证中文混合用户名 /^[\u4e00-\u9fa5a\-\w]+$/ //8-16位密码,数字字母两者都有 /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/ //获取url的search参数 /^\?s=(.*)$/
|
在线测试工具
更多
- 正则对象在线文档
- ES9支持正则表达式反向断言