js正则表达式中的indexOf和search的区别,exec与match的区别说明

indexOf和search的区别

search和indexOf的作用都是匹配出符合条件的字符串的索引位置,区别是search能用正则表达式匹配

exec与match的区别

  1. 当正则表达式无子表达式,并且定义为非全局匹配时,exec和match执行的结果是一样,均返回第一个匹配的字符串内容 ,如下边的第1种情况;

  2. 当正则表达式无子表达式,并且定义为全局匹配时,exec和match执行,做存在多处匹配内容,则match返回的是多个元素数组,而exec只会找到一个匹配的即返回,如下边的第2种情况;

  3. 当正则表达式有子表达式时,并且定义为非全局匹配,exec和match执行的结果是一样如下边的第3种情况;

  4. 当正则表达式有子表达式时,并且定义为全局匹配,exec和match执行的结果不一样,此时match将忽略子表达式,只查找全匹配正则表达式并返回所有内容,如下第4种情况;

也就说,exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同

第1种情况

1
2
3
4
var reg = new RegExp("abc") ; 
var str = "3abc4,5abc6";
console.log(reg.exec(str)); //abc
console.log(str.match(reg)); //abc

第2种情况

1
2
3
4
var reg = new RegExp("abc","g") ; 
var str = "3abc4,5abc6";
console.log(reg.exec(str));//["abc", index: 1, input: "3abc4,5abc6", groups: undefined]
console.log(str.match(reg));//["abc", "abc"]

效果图:

第3种情况

1
2
3
4
var reg = new RegExp("a(bc)") ; 
var str = "3abc4,5abc6";
console.log(reg.exec(str));//abc,bc
console.log(str.match(reg));//abc,bc

效果图:

第4种情况

1
2
3
4
var reg = new RegExp("a(bc)","g") ; 
var str = "3abc4,5abc6";
console.log(reg.exec(str));//abc,bc
console.log(str.match(reg));//abc,abc

效果图