javascript正则表达式(6)——字符串对象方法

来源:互联网 发布:奥特曼玩具淘宝网 编辑:程序博客网 时间:2024/05/14 17:50

String.protatype.search(reg)

1.search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串

2.方法返回第一个匹配结果index,查找不到返回-1

3.search()方法不执行全局匹配,它将忽略标志g,并且总是从字符串的开始进行检索

下面请看例子:


1.传入的参数可以不是字符串

2.当传入的参数不是正则的时候,系统会尝试把参数转换成正则,如1->/1/

3.不执行全局匹配,忽略标志g,并且总是从字符串的开始进行检索。这一点大家可以从最后3条一样的指令看出


String.protatype.match(reg)

1.match()方法将检索字符串,以找到一或多个与regexp匹配的文本

2.regexp是否具有标志g对结果影响很大

我们来看一下没有g的时候,也就是非全局调用的时候

                                                                          非全局调用

1.如果regexp没有标志g,那么match()方法就只能在字符串中执行一次匹配

2.如果没有找到任何匹配的文本,将返回null

3.否则它将返回一个数组,其中存放了与它找到的匹配文本有关的信息

 

那么它返回了什么了?我们以前回顾前面非全局调用的内容(与exec是相同的):

1.返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本

2.除了常规的数组元素之外,返回的数组还有2个对象属性

     a. index声明匹配文本的起始字符在字符串的位置

     b. input声明对stringObject的引用


非全局调用请看下图:


                                                                                  全局调用

1.如果regexp具有标志gmatch()方法将执行全局检索,找到字符串中的所有匹配子字符串

    a.没有找到任何匹配的子串,则返回null

    b.如果找到了一个或多个匹配子串,则返回一个数组

2.数组元素中存放的是字符串中所有的匹配子串,而且也没有index属性或input属性
全局调用请看下图


我们可以看到,match()方法返回的数组既没有匹配的分组信息,也没有相应的下标信息。只是单单的告诉你有几个匹配结果,如果我们只是想获得匹配内容的话,用match()效率会高一些。如果我们需要详细信息,则应该选择exec()方法。

 

String.prototype.split(reg)

1.我们经常使用split方法把字符串分割为字符数组

'a,b,c,d'.split(','); //["a","b","c","d"]

2.在一些复杂的分割情况我们可以使用正则表达式解决

'a1b2c3d'.split(/\d/); //["a","b","c","d"]


一般的分割我们用不到正则,但是当我们需要分割的字符串中既包含逗号(,)又包含竖线(|)的时候,正则表达式的方便就体现出来了

 

String.prototype.replace

这是最常用的正则函数之一,可以传入2个参数,一个参数用于查找,一个参数用于替换。

第一个例子:


第二个例子:


第二个例子很明显没有达到我们期望的效果,后面两个1没有被替换,它只匹配了第一个参数。那么如何才能实现我们要的效果呢?

 

看一下replace()方法接受哪些参数

String.prototype.replace(str,replaceStr)

String.prototype.replace(reg,replaceStr)

String.prototype.replace(reg,function)

 

所以我们可以传入正则表达式的参数,这个时候用正则会方便一点。



其实看到这里大家也应该猜到了,为什么第二个例子中只有第一个1被替换了?因为'1'被隐式转换成了/1/这种正则的写法。


但是当我们需要进行更精细的操作的时候,正则表达式作为参数就无能为力了,比如我们要将:a1b2c3 => a2b3c4 ,每一个数字加1

                                                                      function参数含义

function会在每次匹配替换的时候调用,有四个参数(参数个数不固定)

1.匹配字符串

2.正则表达式分组内容,没有分组则没有该参数

3.匹配项在字符串中的index

4.原字符串

如果没有分组则只有3个参数,如果有1个分组则有4个参数,如果有2个分组则有5个参数。我们需要根据不同的正则表达式来写不同参数个数的函数,这种设计不太好

请看第一个例子:


搜索数字,第一个参数是匹配结果,第二个参数是当前匹配的位置,第三个参数是原字符串,因为这里没有分组,所以只有3个参数

请看第二个使用分组的例子:


添加了分组参数,其他同第一个例子


1 0
原创粉丝点击