2

我的页面上有这个array.prototype,它似乎占用了很多处理时间:

        Array.prototype.findInArray = function(searchStr) {
          var returnArray = false;
          for (i=0; i<this.length; i++) {
            if (typeof(searchStr) == 'function') {
              if (searchStr.test(this[i])) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            } else {
              var regexp = new RegExp(".*" + searchStr + ".*");
              if (this[i].match(regexp)) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            }
          }
          return returnArray;
        }
4

3 回答 3

10

首先,你知道你不必在两边都有“.*”,对吧?默认情况下,正则表达式将匹配字符串中的任何位置。其次,如果您只是在搜索一个常量字符串,并且不需要使用正则表达式提供的任何高级东西,那么使用.indexOf(). 另外,这样您就不必担心转义具有特殊含义的字符。

于 2009-06-17T17:10:12.230 回答
0

正则表达式可以有很大的不同。我想一个简单的、精心设计的正则表达式可能会比 indexOf() 运行得更快或更快。另一方面,一个复杂的正则表达式需要更多的时间,因为它需要做更多的工作。

您还有一个浏览器实现问题,使事情变得模糊不清。如果没有编写一个定时循环来测量每个浏览器根据您的特定需求进行每种类型的检测所花费的时间,您就无法真正得到可靠的答案。

于 2009-06-17T17:09:44.977 回答
0

更糟糕的是,您在循环的每次迭代中创建一个新的正则表达式对象——在循环外定义一次,或者将其作为参数传递。

此外,对于这种用途,testmatch更好更快。

于 2009-06-17T19:29:19.977 回答