正则表达式中test、exec、match的区别介绍及括号的用法
2018-12-19 本文已影响0人
chouchou723
1.test:
test 返回 Boolean,查找对应的字符串中是否存在模式。
var str = "1a1b1c";
var reg = new RegExp("1.", ""); // 或者写成/1./
alert(reg.test(str)); // true
2.exec:
exec 查找并返回当前的匹配结果,并以数组的形式返回。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
var arr = reg.exec(str);
如果不存在模式,则 arr 为 null,否则 arr 总是一个长度为 1 的数组,其值就是当前匹配项。arr 还有三个属性:index 当前匹配项的位置;lastIndex 当前匹配项结束的位置(index + 当前匹配项的长度);input 如上示例中 input 就是 str。
exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(reg.exec(str)[0]);
alert(reg.exec(str)[0]);
会输出两个1a
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(reg.exec(str)[0]);
alert(reg.exec(str)[0]);
分别输出1a和1b
3.match:
match 是 String 对象的一个方法
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(str.match(reg));
match有点像 exec,但exec 是 RegExp 对象的方法;math 是 String 对象的方法。
区别在于如果指定了参数 g,那么 match 一次返回所有的结果。
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(str.match(reg)); // ["1a", "1b", "1c"]
alert(str.match(reg)); // ["1a", "1b", "1c"]
还有一些有用的方法:
提取数据:
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
regex.test(string); // 正则操作即可,例如
//regex.exec(string);
//string.match(regex);
console.log(RegExp.$1); // "2017"
console.log(RegExp.$2); // "06"
console.log(RegExp.$3); // "12"
替换:
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, "$2/$3/$1");
console.log(result); // "06/12/2017"
反向引用
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;// \1就代表了(-|\/|\.),来保证了符号匹配的一致性;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false