使用场景:表单判断 对字符串进行匹配
创建
js通过内置对象RegExp支持正则表达式,
字面量
var pattern = /\[bc\]at/i;匹配第一个"[bc]at",不区分大小写
构造函数
var pattern = new RegExp("[bc]at","i");
由于构造函数的模式参数是字符串,所有元字符都必须双重转义
正则表达式匹配模式的标志
- g:全局模式,应用于所有字符串
- i:不区分大小写模式
- m:多行模式
元字符
元字符必须要转义
元字符:( [ { \ ^ $ | ) ? * + . ] }
| 字符 | 含义 |
|---|---|
| \t | 水平制表符 |
| \r | 回车符 |
| \n | 换行符 |
| \f | 换页符 |
| \v | 垂直制表符 |
| \0 | 空字符 |
取反
^
var reg = /[^abc]/ig;
范围类
var reg = /[0-9]/;//字符为0-9任何一个
var reg = /[a-z]/;
var reg = /[0-9a-zA-Z]/;
预定义类
| 字符 | 等价类 | 含义 |
|---|---|---|
| . | [^\r\n] | 除了回车符和换行符之外的所有字符 |
| \d | [0-9] | 数字字符 |
| \D | [^0-9] | 非数字字符 |
| \s | [\t\n\x0B\f\r] | 空白符 |
| \S | [^\t\n\x0B\f\r] | 非空白符 |
| \w | [a-zA-Z_0-9] | 大小写字母,数字,下划线 |
| \W | [^a-zA-Z_0-9] | 除大小写字母,数字,下划线 |
边界
| 字符 | 含义 |
|---|---|
| ^ | 以xxx开头 |
| $ | 结尾 |
| \b | 单词边界 |
| \B | 非单词边界 |
var str = 'hello1 hello9orld hello2 123-hello8-456 \r \t javascript \n hello3';
str.match(/\bhello\d\b/g);//["hello1", "hello2", "hello8", "hello3"]
str.match(/\bhello\d/g);//["hello1", "hello9", "hello2", "hello8", "hello3"]
str.match(/hello\d\b/g);//["hello1", "hello2", "hello8", "hello3"]
量词
| 字符 | 含义 |
|---|---|
| ? | 出现零次或一次(最多出现一次) |
| + | 出现一次或多次(至少出现一次) |
| * | 出现零次或多次(任意次) |
| {n} | 出现n次 |
| {n,m} | 出现n到m次 |
| {n,} | 至少出现n次 |
var str = 'hello1 hello9orld hello2 123-hello8-456 \r \t javascript \n hello3';
str.match(/hello.*/g);// ["hello1 hello9orld hello2 123-hello8-456 ", "hello3"]
str.match(/hello.\S{4}/g);//["hello9orld", "hello8-456"]
贪婪与非贪婪模式
- 贪婪模式 量词在默认下是尽可能多的匹配的
- 非贪婪模式 让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,在量词后加上?即可
分组
var reg = /(hello){20}/
或
var reg = /hello|world/
前瞻
| 表达式 | 含义 |
|---|---|
| exp1(?=exp2) | 匹配后面是exp2的exp1 |
| exp1(?!exp2) | 匹配后面不是exp2的exp1 |
var str = 'goodByron123';
var str2 = 'goodCasper123';
str.match(/good(?=Byron)/);//["good"]
str2.match(/good(?=Byron)/);//null
str.match(/good(?!Byron)/);//null
str2.match(/good(?!Byron)/);//["good"]
方法
.test()
用于测试字符串参数中是否存正则表达式模式
var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45');//true
reg.test('a.45');//false
.exec()
正则表达式模式在字符串中运行查找。
如果exec()找到了匹配的文本,则返回一个结果数组,否则返回 null。 包含两个额外的属性:
- index:匹配项在字符串上的位置
- input:应用正则表达式的字符串