JavaScript的正则表达式正则表达式
1.字面量数组
(1)ide
let reg = /\bis\b/; let test = 'She is a beautiful girl.He is a handsome boy.You are a dog.'; layer.alert(test.replace(reg, 'IS'));
结果:函数
She IS a beautiful girl.He is a handsome boy.You are a dog.
(2) 这里只替换了第一个is,若是要全局替换,在后面加个gcode
let reg = /\bis\b/g; let test = 'She is a beautiful girl.He is a handsome boy.You are a dog.'; layer.alert(test.replace(reg, 'IS'));
结果:regexp
She IS a beautiful girl.He IS a handsome boy.You are a dog.
2.构造函数视频
(1)对象
let reg = new RegExp('\\bis\\b'); let test = 'She is a beautiful girl.He is a handsome boy.You are a dog.'; layer.alert(test.replace(reg, 'IS'));
结果:索引
She IS a beautiful girl.He is a handsome boy.You are a dog.
(2) 若是要全局替换,在后面加个gip
let reg = new RegExp('\\bis\\b', 'g'); let test = 'She is a beautiful girl.He is a handsome boy.You are a dog.'; layer.alert(test.replace(reg, 'IS'));
结果:
She IS a beautiful girl.He IS a handsome boy.You are a dog.
匹配符:
1.将abc中任意字符替换成M
let reg = /[abc]/g; let test = '1a2b3c4d'; layer.alert(test.replace(reg, 'M'));
结果:
1M2M3M4d
2.取反,除了abc之外的全部字符都替换成M
let reg = /[abc]/g; let test = '1a2b3c4d'; layer.alert(test.replace(reg, 'M'));
结果:
MaMbMcMM
let reg = /[a-zA-Z]/g; let test = '1a2b3c4d5A6F7X8Z'; layer.alert(test.replace(reg, 'M'));
结果:
1M2M3M4M5M6M7M8M
边界匹配字符:
1.贪婪模式(尽量多的匹配)
let reg = /\d{3,6}/g; let test = '12345678'; layer.alert(test.replace(reg, 'X'));
结果:
X78
2.非贪婪模式(尽量少的匹配)
let reg = /\d{3,6}?/g; let test = '12345678'; layer.alert(test.replace(reg, 'X'));
结果:
XX78
1.匹配数字加小写字母连续出现3次的场景
let reg = /(\d[a-z]){3}/g; let test = '1a2b3c4d'; layer.alert(test.replace(reg, 'X'));
结果:
X4d
2.或
let reg = /1a2b3c(4d|5e)6f7g8h/g; let test = '1a2b3c4d6f7g8h 1a2b3c5e6f7g8h'; layer.alert(test.replace(reg, 'X'));
结果:
X X
3.反向引用(捕获分组中内容)
let reg = /(\d{4})-(\d{2})-(\d{2})/g; let test = '2019-10-30'; layer.alert(test.replace(reg, '$2/$3/$1'));
结果:
10/30/2019
注:
let reg = /(?:\d{4})-(\d{2})-(\d{2})/g; //忽略第一个分组
例1.
let reg = /\w(?=\d)/g; let test = 'a1b2c^d$'; layer.alert(test.replace(reg, 'X'));
结果:
X1X2c^d$
例2.
let reg = /\w(?!\d)/g; let test = 'a1b2c^d$'; layer.alert(test.replace(reg, 'X'));
结果:
aXbXX^X$
js无后顾!!!
例:
let reg = /\w/g; layer.alert(reg.global+"</br>"+ reg.ignoreCase+"</br>"+ reg.multiline+"</br>"+ reg.lastIndex+"</br>"+ reg.source);
结果:
true false false 0 \w
1.test方法,找到当前匹配位置的索引(全局调用)
let reg2 = /\w/g; let result = ''; while(reg2.test('abcdef')){ result += reg2.lastIndex + '</br>'; } layer.alert(result);
结果:
1 2 3 4 5 6
2.exec方法
若是没有匹配的文本则返回null,不然返回一个结果数组
(1).非全局调用
例.
let reg1 = /\d(\w)\d/; let ts = '1a2b3c4d5e'; let ret = reg1.exec(ts); let result = ''; result += reg1.lastIndex + ' ' + ret.index + ' ' + ret; result += '</br>'; result += reg1.lastIndex + ' ' + ret.index + ' ' + ret; layer.alert(result);
结果:
0 0 1a2,a 0 0 1a2,a
(2).全局调用
例.
let reg2 = /\d(\w)\d/g; let ts = '1a2b3c4d5e'; let ret = ''; let result = ''; while(ret = reg2.exec(ts)){ result += reg2.lastIndex + ' ' + ret.index + ' ' + ret; result += '</br>'; } layer.alert(result);
结果:
3 0 1a2,a 7 4 3c4,c
1.search()方法
2.match()方法
(1).非全局调用
例:
let reg1 = /\d(\w)\d/; let ts = '1a2b3c4d5e'; let ret = ts.match(reg1); let result = ''; result += ret + ' ' + ret.index + ' ' + reg1.lastIndex; layer.alert(result);
结果:
1a2,a 0 0
(2).全局调用
例:
let reg2 = /\d(\w)\d/g; let ts = '1a2b3c4d5e'; let ret = ts.match(reg2); let result = ''; result += ret + ' ' + ret.index + ' ' + reg2.lastIndex; layer.alert(result);
结果:
1a2,3c4 undefined 0
3.split()方法
将字符串分割为字符数组
例:
let reg1 = /\d/g; let ts = '1a2b3c4d5e'; let ret = ts.split(reg1); console.log(ret) //layer不支持数组的弹出,因此改成console
结果:
["", "a", "b", "c", "d", "e"]
4.replace()方法
例1:
let reg1 = /1/g; let ts = '1a1b1c1d1e'; let result = ts.replace(reg1, 2); layer.alert(result);
结果:
2a2b2c2d2e
replace第二个参数也能够为一个function
function会在每次匹配替换的时候调用,有四个参数
(1).匹配字符串
(2).正则表达式分组内容,没有分组则没有该参数
(3).匹配项在字符串中的index
(4).原字符串
例2:没有分组
let reg1 = /\d/g; let ts = '1a2b3c4d5e'; let ret = ts.replace(reg1, function(match, index, origin){ console.log(index); return parseInt(match)+1; }); console.log(ret);
结果:
0 2 4 6 8 2a3b4c5d6e
例3:有分组(注意参数有变化)
let reg1 = /(\d)(\w)(\d)/g; let ts = '1a2b3c4d5e'; let ret = ts.replace(reg1, function(match, group1, group2, group3, origin){ console.log(match); return group1 + group3; }); console.log(ret);
结果:
1a2 3c4 12b34d5e