function add(str,count){
if(count && count>10){
count = 10;//count不可太大,否则浏览器会很容易崩溃
}
for(var i = 0;i < count;i++){
str = str+str;
}
return str;
}
var s = document.body.innerHTML;
//console.log(s.length);
s = add(s,10);
//console.log(s.length);
var start = (new Date()).getTime();
var match = s.match(/闲聊/gi); //去掉gi选项会快很多
console.log((new Date()).getTime()-start);
var start2 = (new Date()).getTime();
s.indexOf('闲聊');
console.log((new Date()).getTime()-start2);
测试结果:
在chrome和firefox下indexOf 比match快很多。复杂模式下match应该会快一些。测试案例不完善,不能说明什么。不过平时代码中个人还是使用match多一些,因为语义上更清晰。
http://userjs.org/help/tutorials/efficient-code#stringmatch这篇文章解说的不错,该作者推荐indexOf:
引用
String matching
If you need to search a within one string to see if it contains another string, there are two basic ways to do it. The first is to use 'indexOf' to find the position of the substring within the string. The second is to use 'match' or an equivalent method to find if a regular expression pattern can be found in the string.
All string matching techniques are very fast, but they should be used carefully to avoid making them wasteful. In general, with very simple string matches in Opera, stringObject.indexOf is faster than stringObject.match. If searching for simple string matches, indexOf should be used instead of regular expression matching wherever possible.
You should avoid matching against very long strings (10KB+) unless you absolutely have to. If you are certain that the match will only occur in a specific portion of the string, take a substring, and compare against that, instead of the entire string.
Using regular expressions with large numbers of wildcards will make string matching noticably slower. Repeatedly replacing substrings is also costly, and if possible try to reduce the number of replace commands you use, and try to optimise into fewer, more efficient replace commands. In many cases, string replacement performed against the page's own scripts would be better done by using opera.defineMagicFunction or defineMagicVariable to override a variable. If possible, use these instead. There is no single rule to this, and each script will need to be dealt with on an indiviual basis.
分享到:
相关推荐
### JavaScript的indexOf函数忽略大小写方法 在JavaScript中,`indexOf`函数被广泛用于字符串处理,主要用于查找一个字符串是否包含另一个子字符串,并返回该子字符串第一次出现的位置索引(如果未找到,则返回-1)...
查找和比较方面,`indexOf()`和`lastIndexOf()`分别从前向后和后向前搜索子字符串的位置。`localeCompare()`按照本地排序规则比较字符串。`match()`配合正则表达式查找匹配项,`search()`查找与正则表达式匹配的首个...
为了在JavaScript中实现忽略大小写的搜索,可以将目标字符串和子字符串都转换成同样的大小写形式(全部转换为大写或小写),然后再执行`indexOf`方法进行比较。通过`toLowerCase()`方法可以将字符串转换为全部小写,...
`String`对象则是用于表示和操作字符串的一系列方法和属性的集合体。虽然字符串本身是不可变的,但可以通过创建`String`对象来使用更多的功能。 #### 二、`String`对象的构造 可以使用`new String()`来创建一个`...
JavaScript中的String对象封装了多种用于操作字符串的方法,这些方法让我们可以轻松地进行诸如拼接、搜索、替换和比较等操作。接下来,我们就来详细了解一下JavaScript String对象的常用方法。 首先,要明白一个...
在JavaScript中,`indexOf`函数是一个非常常用的字符串方法,它用于查找指定的子字符串在原字符串中的位置。然而,该函数默认是严格区分大小写的,这意味着如果子字符串的大小写与原字符串不完全匹配,`indexOf`将...
JavaScript中的String对象是处理文本数据的核心工具,它包含了一系列用于操作和处理字符串的方法。作为面向对象编程的一部分,String对象在JavaScript中属于内置对象,这意味着它已经预定义并且可以直接使用。以下是...
这些知识点覆盖了JavaScript中`String`对象的主要特性和常用方法。理解和掌握这些内容,将有助于你在处理字符串时更得心应手。在实际开发中,还可以结合其他JavaScript特性,如数组方法、正则表达式等,实现更多复杂...
JavaScript中的`indexOf`函数是处理字符串的一个非常重要的方法,它用于在字符串中查找指定的子字符串,并返回子字符串第一次出现的起始位置。如果找不到,则返回-1。这个方法是区分大小写的,也就是说,它会根据...
以上介绍的`charAt()`, `indexOf()`, `lastIndexOf()`, `substring()`, `toLowerCase()`和`toUpperCase()`方法,都是JavaScript String对象中非常实用且常用的字符串处理函数。掌握了这些方法,可以大大提高我们处理...
JavaScript中的String对象是处理文本数据的基本工具,它包含了一系列用于操作和检索字符串的方法。由于字符串在JavaScript中是不可变的,这意味着所有修改字符串的方法都不会直接改变原字符串,而是返回一个新的字符...
`indexOf()` 方法返回指定字符或子字符串首次出现的位置索引。如果没有找到,则返回 -1。可以指定一个可选的开始搜索的索引值。例如: ```javascript var a = "hello"; var index1 = a.indexOf("l"); // index1 = 2...
5. **字符串String**: `String`对象具有多种字符串操作方法,如`charAt`、`substring`、`indexOf`、`replace`、`trim`等。`模板字符串`(Template literals)是现代JavaScript引入的新特性,支持多行和内嵌表达式。 ...
10. **字符串函数**:JavaScript中的字符串是不可变的,但提供了大量处理字符串的方法,如substring、indexOf、trim、concat、split、join等,以及模板字符串(ES6引入)和字符串的replace方法支持正则表达式,提高...