【js学习笔记-062】用于模式匹配的String方法

来源:互联网 发布:手机知乎怎么收藏文章 编辑:程序博客网 时间:2024/05/17 09:34

本节只讨论与正则有关的方法和属性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”]