Javascript中与正则表达式相关的常用方法解析

正则表达式是Javascript中一个重要特性,可以对相关字符串进行模式匹配,查找,以及替换,可以通过正则表达式直接量和RegExp函数进行创建,与之相关的方法有两种,即:字符串中的方法和正则表达式对象的方法。
一、字符串中的方法
1、search()方法
它的参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串,它将返回-1。如果search()方法参数不是正则表达式,则首先会通过RegExp构造函数将它转换成正则表达式,该方法不支持全局检索,因为它忽略正则表达式参数中的修饰符。
2、replace()方法
用来执行检索 与替换。其中第一个参数可以是一个正则表达式,第二个参数是要进行替换的字符串。这个方法会对调用它的字符串进行检索,使用指定的模式来匹配。如果正则表达式中设置了修饰符g,那么源字符串的所有与模式匹配的子串都 将换成第二个参数指定的字符串。如果replace()的第一个参数是字符串而不是正则表达式,则将直接搜索这个字符串,而不是像search()方法一样首先通过RegExp()方法将它转成正则表达式。replace()方法中,如果 在替换字符串中出现了 r e p l a c e ( ) 1就是第一个子表达式,$2就是第二个子表达式依此类推…。有种情况会用到这个特性。
例如要把由英文的引号括起来的文本替换成由中文的半角引号括起来的文本但要保持文本内容不变。
先写一个起始于引号,终止于引号的正则表达式。var reg = /^"([^"]*)"$/,文本内容为:text = "\"javascript is fun!\"",现在里面的引号要改成中文的引号"\“javascript is fun!\”"得到这样的效果。则可以直接这样替换。text.replace(reg,"“$1”");
replace()函数还有另外一种用法 ,当传入一个函数时,即,text.replace(reg,function(a,b,c){});参数a为正则表达式reg所匹配的文本,b为匹配的文本的下标,c为text本身。
3、match()方法
该方法接受一个正则表达式作为参数,当正则表达式带有g全局匹配时,会返回一个数组,数组的内容是所有与该正则表达式所匹配的文本。当该正则表达式不是全局匹配时,它也返回一个数组,但数组的第一个元素内容是,与该正则表达式匹配的文本,第二个元素是该正则表达式中第一个子表达式(如果有的话)匹配的文本,第三个元素是该正则表达式中第二个子表达式(如果有的话)匹配的文本,依此类推。。。

一、正则表达式中的方法
1、exec()方法
该方法接受一个字符串,找到匹配文本时,与match()方法一样,也会返回一个数组,但该方法不管正则表达式是否是全局匹配,都会返回一样的数组,即,数组的第一个元素内容是,与该正则表达式匹配的文本,第二个元素是该正则表达式中第一个子表达式(如果有的话)匹配的文本,第三个元素是该正则表达式中第二个子表达式(如果有的话)匹配的文本,依此类推。。。,不过 有一点需要注意的是,如果正则表达式是全局匹配时,第一次调用exec()方法时,该正则表达式中的lastIndex属性会指向所匹配文本的最后一个字符串的下一个位置,即,在第二次调用该方法时,会从这个位置开始查找 。如下 :

var str = "JavaScript is more fun than java!";
var pattern = /java/gi;
var res;
while((res=pattern.exec(str)) != null){
    console.log("字符串"+res[0]+"在位置:"+res.index+"发生匹配,下次查找位置为:"+pattern.lastIndex);
}

输入结果为:

这里写图片描述
当然,返回的结果数组中,也是带有本次匹配的信息的,如果本次匹配时的位置。最后如果找不到匹配,则返回null
2、test()方法
该方法也接受一个字符串,如果在该字符中有与该正则表达式匹配的文本,则返回true,否则返回false,与exec()方法一样,可以多次调用,调用时,正则表达式中的lastIndex属性也会指向发生匹配的下一个位置。

猜你喜欢

转载自blog.csdn.net/yangkaige111/article/details/81142589
今日推荐