正则匹配
文章目录
我们为什么要学习正则匹配
//需求:我们需要提取字符串里面的连续数字,然后返回一个数组
//如果使用自定义函数的方式
let getNumber = (str) => {
let temp = "";
let arr = [];
// 我们首先来循环这个字符串拿到所有的数字字符
for (let i = 0; i < str.length; i++) {
// 如果不是一个数字就返回
if (!isNaN(str[i])) {
//如果是一个数字那么就再组装一下
temp += str[i];
} else {
//如果下一个不是一个数字了那么就把temp放在数组里面
//过滤为空的项
if (temp !== "") arr.push(temp);
temp = "";
}
}
//如果最后一项是数字,添加到输出的数组里面
if (temp !== "") arr.push(temp);
return arr;
};
let result = getNumber(str);
console.log(result);
使用正则匹配
//但是我们通过正则表达式就可以很简单的做到这件事
let reg = /\d+/g; //定义匹配规则
let arr = str.match(reg);
console.log(arr);
//是一样的效果
console.log(isNaN(2));
正则的两种创建方法
字面量创建
注意事项:在字面量创建的匹配规则/ /里面不能解析变量任何在里面的字符,都会被解析成匹配规则
//1. 字面量创建
let str = "Asdasdada223asdada";
let reg = /\d+/g;
//我们就可以在字符串下面调用match方法进行匹配
let arr = str.match(reg);
//但是这种方法不支持变量的形式
/* let abc =123
let reg=/\abc/g //这只能解析成单个字符,无法解析成123 */
通过RegExp创建
通过 let reg2 = new RegExp("\d+", “g”);来创建一个匹配规则
注意的事,第一个参数如果匹配\d \w这些东西,那么需要加上转义字符,然后两个参数第一个是匹配规则,第二个是匹配范围,默认单个匹配,因为第一个参数是参数形式所以可以定义变量
//2.构造函数创建
let str2 = "Asdasdada223asdada";
// let reg2=new RegExp("\d+","g");
// 但是上面这个是不行的这个只会匹配到全局的所有字母d
// 我们需要在匹配的基础上再进行转义一下
let reg2 = new RegExp("\\d+", "g");
//这里是可以用变量的
// 我们定义一个abc
let abc = "12312";
let reg3 = new RegExp(abc, "g")