本节只讨论与正则有关的方法和属性js的String支持4种使用正则表达式的方法。
search()
它的参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配子串,它将返回-1.
如下面的例子返回4:
“JavaScript”.search(/script/i);
注意:如果参数不是正则,则首先会通过RegExp构造函数将它转换成正则表达式,search()不支持全局检索,因为它忽略正则表达参数中的修改符g。
replace()
用以检索与替换操作,其中第一个参数是一个正则表达式,第二个参数是要进行替换字符串。如果replace()的第一个参数是字符串而不是正则表达式,则replace()将直接搜索这个字符串,而不是像search()一样首先通过RegExp()将它转换为正则表达式。
之前学习过的子表达的位置,如果在替换字符串中出现了$加数字,那么replace()将用与指定子表达式相匹配的文本来替换这两个字符。
值得注意,第二个参数可以是函数,该函数能够动态地计算替换字符串。
match()
是最常用的 String正则表达式方法。它唯一参数就是一个正则表达式,返回的是一个由匹配结果组成的数组。如果该正则表达式设置了修饰符g,则该方法返回的数组包含字符串中的所有匹配结果。
如:”1 plus 2 equals 3”.match(/\d+/) //返回[“1”,”2”,”3”]
如果不使用修饰符g,该函数将只检索第一个匹配。总是返回一个数组。数组的第一个元素就是匹配的字符串,余下的元素则是正则表达式中用圆括号括起来的子表达式。因此如果match()返回一个数组a,那么a[0]存放的是完整的匹配,a[1]存放的则是与第一个圆括号括起来的表达式相匹配的子串,以此类推。为了和方法replace()保持一致,a[n]存放的就是$n的内容。如:
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = “Visit my blog at http://www.example.com/~david”;
var result= text.match(url);
if(result!=null){
var fullurl = result[0]; //http://www.example.com/~david
var protocol = result[1]; //http
var host = result[2] ;//www.example.com
var path = result[3] ;//”~david”
}
注意给字符串的match方法传入一个非全局正则表达式,实际上和给这个正则表达式exec()方法传入字符串是一模一样的,它返回的数组带两个属性:index和input。
split()
该方法可以传入正则表达式,如指定分隔符,允许两边可以留有任意多个空白符
“1,2,3,4,5”.split(/\s*,\s*/); //[“1”,”2”,”3”,”4”,”5”]