正则表达式由两部分组成
- 元字符
- 修饰符
创建方式
- 字面量方式:
let reg = /\d/
- 构造函数方式:
let reg = new RegExp("\\d")
常用及特殊元字符
符号 | 意义 |
---|---|
* | 出现0到多次 |
+ | 出现1到多次 |
? | 出现0次或1次 |
n | 出现n次 |
{n} | 出现n到多次 |
{n,m} | 出现n到m次 |
^ | 以哪个字符开始 |
$ | 以那个字符结束 |
. | 除\n意外的任意字符 |
\ | 转义字符 |
\d | 查找(0~9)数字 |
\D | 非(0~9)数字 |
\s | 查找空白字符、Tab、换页符 |
\w | 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’ |
\W | 匹配非数字字母下划线 |
\b | 匹配单词边界 |
x|y | x或y中的一个字符 |
[xyz] | x或者y或者z中的一个字符 |
[^xy] | 除了x/y以外的字符 |
[a-z] | 指定a-z的任意字符 |
() | 分组符号 |
(?:) | 只匹配不捕获 |
(?=) | 正向预查 |
(?!) | 反向预查 |
修饰符
符号 | 意义 |
---|---|
i | 忽略大小写 |
m | 多行匹配 |
g | 全局匹配 |
一些特殊栗子
//了解exec
/\d/.exec("a12"); // ["1", index: 1, input: "a12", groups: undefined]
/\d+/.exec("a12-123");// ["123", index: 1, input: "a123-123", groups: undefined]
//接下来的内容将只展示exec按规则捕获的字符串和index
$
和^
字符的特殊:
// $/^两个都不加,则字符串中包含即可
/\d/.exec("a12") //"1", index: 1
// $和^两个都加,则字符串中只能包含规定内容
/^\d$/.exec("123") //null 只能为只有一个字符且位数字的字符串
/^\d$/.exec("1") // "1", index: 0
/^\d+$/.exec("123"); //"123", index: 0
/^\d+$/.exec("a12"); //null
/^1\d{10}$/.exec("12312312312") //以1开头后面+10个数字结尾 "12312312312", index: 0
/^1\d{10}/.exec("123123123123123aaa") //"12312312312", index: 0,
使用|
运算符需要注意的地方
/^123|456$/
: 以123开头或456结尾都可
/^(123|456)$/
: 只能是123或者456
使用[]
符需要注意的地方
[]
里的字符几乎都为自己本身含义(\d
除外)[]
里不能出现多位数
let reg1 = /^[*+]+$/; //-->[*+]代表一个*或一个+,[*+]+代表一个*或一个+出现多次
reg1.exec("**==") //"**++",index:0
let reg2 = /^[\d]$/; //代表一个数字
reg2.exec("\\"); //null
reg2.exec("1"); // "1",index:0
let reg3 = /^[\\d]$/; //代表\或d
let reg4 = /^[10-29]$/; //代表1或者0-2或者9
let reg5 = /^[(10-29)]$/;// 代表'('/ '1' / '0-2' / '9' / )