前言
学习正则表达式最终目的是用,具体开发过程中哪些场景适用于正则表达式呢?下面我们就来分析一下。
操作
正则表达式核心点就是匹配,不管是匹配字符还是匹配位置。把匹配情况再细分一下,可以分为以下四种操作:
- 替换,匹配到对应的字符然后替换成我们想要的字符,通过replace方法达到替换目的。
const reg = /\d/g;
const str = '12';
console.log(str.replace(reg, 'a')); //aa
- 校验,用正则去校验字符串是否满足条件,比如密码检验,能够用到的方法也有多个。
const reg = /\d/;
const str = '12';
console.log(reg.test(str));
console.log(reg.exec(str));
console.log(str.match(reg));
console.log(str.search(reg));
以上四种方法都能去校验,只是每个方法返回的值不一样,根据判断的方式去选用合适的方法。如果我们想要用test去匹配整体字符,就要加上^与$。
- 分割,我们可以用正则对匹配上的字符进行分割操作,通过字符串split方法去实现。split方法我们都不陌生,需要注意的是split第二个参数代表返回数组的最大长度;如果正则中有分组,那么分割出的数组是包含分割符号的。
const reg = /(,)/;
const str = '1,2,3';
console.log(str.split(reg, 3)); // ['1', ',', '2']
split设置了第二个参数,正则又有了分组,返回的结果就是上述例子所述。
- 提取,去捕获匹配到的结果,该功能一般使用括号的引用作用去实现,除了split,每个方法都能通过匹配结果去提取数据。
match、exec————当match正则不加g时,两个方法返回的结果一致,都返回一个数组,数组的第二个元素开始就是捕获的字符。
test、search————这两个方法可以用捕获组属性去提取。捕获组属性是RegExp的静态属性,RegExp.$1表示第一个捕获的数据,以此类推。
replace————通过回调函数,将匹配到的数据提取出来。
const reg = /(\d)/;
const str = 'abc1';
console.log(str.match(reg)[1]);//1
console.log(reg.exec(str)[1]);//1
reg.test(str)
// str.search(reg)
console.log(RegExp.$1)//1
str.replace(reg, function (one) {
console.log(one); //1
});
RegExp.$1是全局属性,容易造成污染,尽量不要使用。
总结
正则表达式的编程应用大致也就这四个方面,工具最终目的还是方便,是否使用正则,如何写好正则表达式,还是得我们多练。