五种判断方法
1、indexOf方法
代码:
var str = "abc";
if (str.indexOf("bc") != -1) {}
2、search方法
if (str.search("bc") != -1) {}
3、test方法
var reg = new RegExp("^.*bc.*$");
if (reg.test(str)) {}
4、match方法
if (str.match(reg)) {}
5、exec方法
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
if(reg.exec(str)){};
五种方法的比较
1、indexOf与search
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。IndexOf()方法是用来判断一个字符串是否存在于一个更长的字符串中。从长字符串左端到右端来搜索,如果存在该子字符串就返回它所处的位置(即索引)。如果在被搜索的字符串没有找到要查找的字符串返回-1。注意,这里的位置应当填写索引值。所有的字符串索引都是从零开始,第一个字符的位置就是0,终点位置就是字符串的长度减去1。
那么问题来了,search()方法也是同样返回目标自字符串索引值的。indexOf()和search()有什么区别呢?为什么时候该使用它,什么时候该使用search()这个方法呢?
首先要明确search()的参数必须是正则表达式,而indexOf()的参数只是普通字符串。indexOf()是比search()更加底层的方法。
如果只是对一个具体字符串来查找,那么使用indexOf()的系统资源消耗更小,效率更高;如果是查找具有某些特征的字符串(比如查找以a开头,后面是数字的字符串),那么indexOf()就无能为力,必须要使用正则表达式和search()方法了。
很多时候用indexOf()不是为了真的想知道子字符串的位置,而是想知道长字符串中没有包含这个子字符串。如果返回索引值是-1,那么说明没有:不等于-1,那么就是有。所以一般情况下indexOf比search更省资源。
2、match、test和exec的比较
创建正则表达式字面量,加上^和$,与不加是有区别的。
对于test方法,存在比正则多的字符的时候,依然返回比较成功true,这与我们仅仅想比较内容符合预期的要求是相背离的。比如:
var regx = /\d{1,2}\/\d{1,2}\/\d{4}/gi; regx.test('08/08/2014 5');//会返回true,因为字符串中包含符合要求的串。
match也可以获得匹配的内容,而regx.exec('08/08/2014 2')就会返回null,尽管字符串中有符合要求的内容。
macth的调用对象是字符串,exec和test的调用对象是regx
如果你仅仅想在字符串中搜索,那么请不要加开始和结束限定符
regx的exec方法会每次返回1个匹配,如果不为空就进行下一次查找,因此可以使用while循环来写
macth返回1个匹配的数组,test返回字符串中是否包含指定的模式,exec返回字符串中该模式,并将下一次开始查找的位置保存在lastIndex属性中。