.match()javascript有什么问题

时间:2010-07-01 03:03:00

标签: javascript jquery

jquery说: http://docs.jquery.com/JQuery_Core_Style_Guidelines#RegExp

  

应该完成所有RegExp操作   使用.test()和.exec()。   “string”.match()不再使用。

为什么不建议使用.match()?

3 个答案:

答案 0 :(得分:3)

考虑:

假设:

var Str             = 'Here are some words.';
var myRegex         = /(\w+)/ig;

使用match():

var aWordList       = Str.match (myRegex);
var iLen            = aWordList.length;

for (var K=0;  K < iLen;  K++)
{
    console.log ('Word: ', K, ' --> ', aWordList[K]);
}

使用exec():

var aWordList;
var K               = 0;

RegExp.lastindex    = 0;    //-- If this is omitted, nasty side-effects may occur.

while ( (aWordList = myRegex.exec (Str)) != null)
{
    console.log ('Word: ', K++, ' --> ', aWordList[0]);
}

看看exec()有多简单? (我也不是。)

根据我的图表完全支持这两个功能(match()结果在IE上也有input成员除外)。

我无法找到jQuery的人们做出决定的理由。

答案 1 :(得分:1)

这是一种风格的东西。

最大的区别是match被调用如下:

string.match(regex)

testexec的调用如下:

regex.exec(string)

答案 2 :(得分:1)

exec的一个主要好处是它返回捕获组。例如:

var s = "123456789"
var regex = /.(.)(..)/g;

匹配

s.match(regex);
> [1234, 5678]

EXEC:

regex.exec(s);
> [1234, 2, 34]
regex.exec(s);
> [5678, 6, 78]

查看您发布的编码标准;该文件包含许多看似随意的指导方针。显然,它的目的主要是实现一致性,因此有可能exec是首选,因为它具有更多功能 - 可以在某些场合使用,因此它们也可以使用它。

就个人而言,如果没有解释,我并不关心准则,所以你问过这是一件好事。在许多情况下,它会导致基于教条或迷信的编程。