美文网首页
RegExp.prototype.exec()方法

RegExp.prototype.exec()方法

作者: 普莱那 | 来源:发表于2016-11-27 22:59 被阅读196次

正则表达式的exec()方法需要需要传入一个字符串作为他的参数,执行完这个方法后,会返回一个数组,数组的第一个元素是匹配到的字符,第二个元素是第一个子表达式匹配到的字符(如果有的话),第三个元素是第二个子表达式匹配到的字符(如果有的话),依次类推···

举例:

var reg1 = /\d(\w)(\w)\d/

var ts = '@1av43rt64fu8'

var ret = reg1.exec(ts)  // 返回的结果数组为:["1av4","a","v"]

因为reg1的匹配模式是非全局的,所以这个方法无论执行多少次都返回同样的结果数组。

需要说明的是,这个方法除了返回一个结果数组外,这个结果还有两个隐藏的属性:index和input;

index表示匹配到的字符中的首字符在元字符串中的位置,input表示元字符串;

接着上面的代码写

var index = ret.index // 返回1,因为匹配到的字符“1av4”中的首字符“1”在元字符串“@1av43rt64fu8”中的位置为1.

var input = ret.input //返回元字符串:‘@1av43rt64fu8’


上面例子中写到的正则表达式的匹配模式是非全局的,下面写一下

全局匹配模式的正则表达式的exec()方法:


var reg2 = /\d(\w)(\w)\d/g

var ts = '@1av43rt64fu8'

var ret1 = reg2.exec(ts)  // 返回的结果数组为:["1av4","a","v"]

ret1.index // 1

然后我们再次对ts执行exec()方法

ret2 = reg2.exec(ts) //返回的结果数组为:["3rt6","r","t"]

ret2.index // 5

由于在全局匹配模式下,正则表达式会接着上次匹配的结果继续匹配新的字符串

所以这种情况下,正则表达式本身又有了一个新的属性:lastIndex,它指向这一次匹配到的字符串的末尾字符下一个字符,如果我们在第一次执行exec方法的时候,再加上一行代码:

reg2.lastIndex;    //  返回结果为 5,因为匹配到的结果“1av4”的末尾字符“4”的下一个字符是“3”,他的位置是5

如果我们在第二次执行exec方法的时候,再加上一行代码:

reg2.lastIndex;    //  返回结果为 9,因为匹配到的结果"3rt6"的末尾字符“6”的下一个字符是“4”,他的位置是9

以上就是正则表达式的exec()方法的大概介绍。

相关文章

网友评论

      本文标题:RegExp.prototype.exec()方法

      本文链接:https://www.haomeiwen.com/subject/liinpttx.html