js中的简单正则
1.test和match的区别
(1)用法的区别:reg.test(str); str.match(reg);
(2)返回值的区别:reg.test(str); 返回值为true/false
str.match(reg); 返回值为匹配到的内容,数组类型/null
2.g和非g的区别
g表示全局匹配,即会找str中所有匹配到的内容
非g表示局部匹配,也就是只要从开始匹配到一个以后,就不再往下找
案例:
判断字符串中是否有某个连续的子字符串?
let str = "abcde2423abcde756abcesff";
let pattern = /abcde/g;
str.match(pattern); //结果:["abcde","abcde"]
//或者
pattern.test(str); //结果:true
//还有另外一种写法,但是效果和上面一样
let pattern = RegExp(/abcde/g);
str.match(pattern); //结果:["abcde","abcde"]
pattern.test(str); //结果:true
//以上为加g的结果,下面为不加g的结果
let pattern = /abcde/;
str.match(pattern); //结果返回一个数组,内容如下:
/*
0: "abcde"
groups: undefined
index: 0
input: "abcde2423abcde756abcesff"
length: 1
*/
//可以看到,当不加g时,最多返回一个元素,并且会返回匹配到的起始index
pattern.test(str); //结果:true
常见正则需求:
判断一个字符串是否只包含0-9 a-z A-Z,至少有一位?
let str = "ads345anhc55e";
//以下为错误写法
let reg = /^[0-9a-zA-Z]$/;
console.log(reg.test(str));
//分析:js正则匹配默认只匹配1位,但是str明显不止1位,所以匹配到的结果为false
//以下为正确写法
let reg = /^[0-9a-zA-Z]{1,}$/;
console.log(reg.test(str));
//分析:{1,}表示至少长度为1位