i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
方括号用于查找某个范围内的字符:
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字。
(x|y) 查找任何以 | 分隔的选项。
元字符是拥有特殊含义的字符:
\n 换行
\t 制表符Tab
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
\u4e00-\u9fa5 中文范围
量词:
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
什么是正则表达式?
由以下两种字符组成的文字模式
1、普通字符
字母 数字 @
2、特殊字符(有特殊含义的,例如 \ . 等)
该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
创建正则表达式
RegExp 对象
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
- 字面量或直接量
[] {
} /js/
- 构造函数
new Object()
使用方法:
test
找到true,找不到false
exec
找到放到数组里传递回来,找不到返回null
实例:
var str = 'I love you';
var zz = /ove/;
console.log(zz.test(str)); // 找到true,找不到false
console.log(zz.exec(str)); // 找到放到数组里传递回来,找不到返回null
正则表达式默认是区分大小写,也可以忽略大小写
i
-> ignoreCase 忽略大小写
g
-> global 全局匹配
m
-> multiline 多行匹配
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
// i 案例
var str = 'I lOve you';
var zz = /ove/i;
console.log(zz.test(str));
console.log(zz.exec(str));
//没有限制,也可以 var zz = /ove/igm;
构造函数写法:
var str = 'I lOve you';
var zz = new RegExp("Ove",'i');
console.log(zz.test(str)); //true
console.log(zz.exec(str)); // ['Ove']
字面量和构造函数的方式的区别:
字面量方便好用,比较常用,构造函数的方式比较好用。
字面量比较难改,构造函数是字符串传进来的,可以同变量传进来,可以随便改。
示例:
var str = 'I lOve you';
var pj = 'Ove';
var zz = new RegExp(pj,'i');
console.log(zz.test(str));
console.log(zz.exec(str));
正则表达式的测试工具
\
转义符
比如,在使匹配/
的时候
var pp = '/\/\//'; //两边的 / 是原有格式上的,中间的\/代表一个/
var i = '\\\\'; //这里其实是两个 \
var n = /\\\\/; //匹配规则
console.log(n.exec(i));
普通字符转换成特殊字符:
\n 换行
\t 制表符Tab
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
字符类:
⭐⭐⭐匹配 [] 中任意一个,然后停止
// ^ 除什么以外任意字符
var str = 'yijuhua';
var i = /[yi]/;
console.log(i.test(str)); //true
console.log(i.exec(str)); // ['y']
var a = /[^yi]/;
console.log(i.test(str)); //true
console.log(i.exec(str)); // ['j'] yi会跳过,然后找到j符合条件停止
var i = /[a-z]/; //匹配a-z
var i = /[c-z]/; //匹配c-z
//前面的不能大于后边的,可以等于
var i = /[