正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
1.0 创建方法
字面量创建
var reg = /正则表达式/修饰符;
var reg = /hello/img;
构造函数创建
var reg = new RegExp('正则表达式','修饰符');
var reg = new RegExp('hello','img');
2.0 方法
2.1 exec
var reg = /hello/;
var str = 'hello worle hello javascript';
console.log(reg.exec(str));
//执行结果
/*[
'hello',
index: 0,
input: 'hello world hello javascript',
groups: undefined
]*/
注:根据正则表达式(reg)校验字符串(str)中是否有连续的‘hello’,没有则返回null,则返回 数组:[匹配的内容,index: 在str中匹配的起始位置,input: 参数字符串,groups: undefined]
2.2 test
var reg = /hello/;
var str = 'hello world hello javascript';
console.log(reg.test(str));
//执行结果
//true
注:根据正则表达式(reg)校验字符串(str)中是否有连续的‘hello’,没有则为false,有则为true
3.0 修饰符与lastIndex属性
3.1 修饰符
ignoreCase、global、multiline 三个修饰符简写为igm
var reg = /hello/igm;
i:匹配校验时忽略字母的大小写
g:进行全局的匹配
m:进行多行匹配 如:多行文字匹配
注:i,g,m可以单独使用也可以多个使用
3.2 lastIndex属性
var str = 'hello hello hello';
var reg1 = /hello/;
var reg2 = /hello/g;
console.log(reg1.lastIndex); // 0
console.log(reg1.exec(str)); // 返回第一个hello
console.log(reg1.lastIndex); // 0
console.log(reg2.lastIndex); // 0
console.log(reg2.exec(str)); // 返回第一个hello
console.log(reg2.lastIndex); // 5
console.log(reg2.lastIndex); // 5
console.log(reg2.exec(str)); // 返回第二个hello
console.log(reg2.lastIndex); // 11
console.log(reg2.lastIndex); // 11
console.log(reg2.exec(str)); // 返回第三个hello
console.log(reg2.lastIndex); // 17
console.log(reg2.exec(str)); //返回 null
console.log(reg2.lastIndex); // 0
console.log(reg2.exec(str)); // 返回第一个hello
注:lastIndex属性是对校验位置的纪录,一般配合修饰符g来使用,如上 当我们进行校验前lastIndex=0
1.不加修饰符 g 时,我们每次进行匹配校验后都会把lastIndex属性重置为0,也就是说我们每次匹配校验都是从头开始的
2.加上修饰符 g 时,当我们进行第一次匹配校验后,lastIndex属性就会纪录校验位置,再次匹配后lastIndex并不会置0,而是根据上次校验后的位置接着向下校验,然后更新lastIndex,直到全部校验结束后lastIndex才会重新置0
4.0 字符
4.1 字符集合
//表示123其中的一个
reg1 = /[123]/;
//...
reg2 = /[abc]/;
//...
reg3 = /[ABC]/;
//表示数字1到9其中的一位数
reg4 = /[1-9]/;
//表示英文字母a到z其中的一个
reg5 = /[a-z]/;
//表示英文字母A到Z其中的一个
reg6 = /[A-Z]/;
var str = 'hello123';
console.log(reg1.exec(str));
注:[ ]只表示一位字符
4.2 直接量字符
字符 | 匹配 |
---|---|
字母和数字字符 | 自身 |
\o | Null字符 |
\t | 制表符 |
\n | 换行符 |
\v | 垂直制表符 |
\f | 换页符 |
\r | 回车符 |
注:无特殊含义,记住就行了
4.3 边界符 ^ $ \b \B
//^在括号外 表示以什么开头
var reg1 = /^[0-9]/;
//^在括号里 表示取反 reg2表示除了0-9外的其他所有字符中的任意一个
var reg2 = /[^0-9]/;
//$表示以什么结尾
var reg3 = /[0-9]$/;
// ^ $ 结合使用 表示精确定位
var reg4 = /^123$/
//reg4表示只有123符合(123123不符合)
注:要区分^在[ ]里和外的区别
var str = 'Hello World Hello JavaScript';
var reg1 = /\bHello\b/g;
var reg2 = /\BScrip\B/g;
console.log(reg1.exec(str));
console.log(reg2.exec(str));
注: /\bHello\b/表示从H开始到空格前结束,\B与\b相反,\B只能去取边界内人内容
4.4 字符
字符类 | 含义 |
---|---|
. | 匹配除换行符\n和回车符之外的任何单个字符,等效于[^\n\r] |
\d | 匹配一个数字字符,等效于[0-9] |
\D | [^0-9] |
\w | 匹配包括下划线的任何单个字符,包括A~Z,a~z,0~9和下划线"_",等效于[a-zA-Z0-9_] |
\W | [^a-zA-Z0-9_] |
\s | 匹配任何Unicode空白字符,包括空格、制表符、换页符等,等效于[\f\t\n\r] |
\S | [^\f\t\n\r] |
注:只是一个等效的替换,记住就行了
4.5 数量词
字符 | 含义 |
---|---|
* | >=0次 |
+ | ≥1 次 |
? | 0或1次 |
{n} | n 次 |
{n,} | ≥n 次 |
{n,m} | n到m 次 |
例:
// * 允许出现0次或多次
var reg = new RegExp(/^a*$/);
console.log(reg.test("a")); // true
console.log(reg.test("")); // true
// {3} 允许重复3次
var reg1 = new RegExp(/^a{3}$/);
console.log(reg1.test("a")); // false
console.log(reg1.test("")); // false
console.log(reg1.test("aaa")); // true
console.log(reg1.test("aaaa")); // false
5.0 身份证号
// 不能以数字0开头,只能由数字组成,最后一位可能是x,X,数字
var reg = /^[1-9]\d{16}[xX\d]$/;
var str = "15232421114526997x";
var result = reg.exec(str);
console.log(result);