正则表达式
1.基本语法
// +:一个、多个
// *:0个、一个、多个
// ?:0个、一个
abc+d 可匹配:abcd abccd ...
abc*d 可匹配:abd abcd abccd ...
abc?d 可匹配:abcd abd
// 普通字符
[abc]匹配目标的所有a b c
[^abc]匹配目标的所有非a b c字符
2.定位符
// ^ $ \b \B
/^abc [0-9]+/ //以abc开始后面一个或多个数字
/[\d+] abc$/ //以abc结尾前面有一个或多个数字
/\bao/ //可以匹配 aoC 不能匹配CaoD CDao (匹配单词边界)
/\Bao/ //可以匹配CaoD 不能匹配aoC CDao (匹配非单词边界)
3.贪婪
/<.*>/.match(<h1>dsdasdas</h1>) //匹配<h1>dsdasdas</h1>
/<.*?>/.match(<h1>dsdasdas</h1>) //匹配<h1>
4.先行断言(lookahead)和后行断言(lookbehind)
/abc(?=[0-9]+)/g // 匹配数字前面的abc
/(?<=[0-9]+)abc/g //匹配数字后面的abc
/abc(?![0-9]+)/g //匹配非数字前面的abc
/(?<![0-9]+)abc/g //匹配非数字后面的abc
5.test exec match
test() 返回值为boolen
test()检测字符串是否符合正则规则,符合返回true,否则返回false
const a = 'ak1a2a3';
const reg = /a./;
const test = reg.test(a) //true
符串符合正则规则,则返回值为长度为1的数组,数组内存放着第一个符合规则的子串,数组的三个属性:index:符合规则子串的起始位置; lastIndex:符合规则子串的结束位置; input:保存着str
const a = 'ak1a2a3';
const reg = /a./;
const exec = reg.exec(a) // ['ak', index: 0, input: 'ak1a2a3', groups: undefined]
match() [match()方法属于字符串的方法,上面两个方法属于正则的方法]当没有在正则表达式中写g时,match()的用法跟exec()相同,但当用了g以后,match一次性返回所有满足条件的子串,而exec()只返回一个。match()方法返回的数组同样拥有三个属性
const a = 'ak1a2a3';
const reg = /a./;
const match = a.match(reg) //['ak', index: 0, input: 'ak1a2a3', groups: undefined]
- g m
// g 全局匹配
// 对test无影响
const a = 'ak1a2a3';
const reg = /a./g;
const reg1= /a./;
console.log(reg.test(a),reg1.test(a)) //true true
// exec:无g匹配第一个,有g匹配全局不同位置
const a = 'ak1a2a3';
const reg = /a./g;
const reg1= /a./;
console.log(reg.exec(a),reg1.exec(a));
console.log(reg.exec(a),reg1.exec(a));
console.log(reg.exec(a),reg1.exec(a));
//
['ak', index: 0, input: 'ak1a2a3', groups: undefined] ['ak', index: 0, input: 'ak1a2a3', groups: undefined]
['a2', index: 3, input: 'ak1a2a3', groups: undefined] ['ak', index: 0, input: 'ak1a2a3', groups: undefined]
['a3', index: 5, input: 'ak1a2a3', groups: undefined] ['ak', index: 0, input: 'ak1a2a3', groups: undefined]
// match: 无g匹配第一个,有g一次匹配全局不同位置
const a = 'ak1a2a3';
const reg = /a./g;
const reg1= /a./;
console.log(a.match(reg),a.match(reg1));
// ['ak', 'a2', 'a3'] ['ak', index: 0, input: 'ak1a2a3', groups: undefined]
// m 多行匹配 必须用 ^或 $
const a = `as
adfag`;
const reg = /^a./g;
const reg1 = /a./g;
const reg2 = /^a./gm;
const reg3 = /a./gm;
console.log(a.match(reg),a.match(reg1),a.match(reg2),a.match(reg3))
// ['as'] (3) ['as', 'ad', 'ag'] ['as'] (3) ['as', 'ad', 'ag']