前端JavaScript的技术技巧交流~

正则表达式中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
上一篇 下一篇

猜你喜欢

热点阅读