Đin*_*hâu 150 javascript regex substring
我正在处理JavaScript上的性能问题.所以我只想问:检查字符串是否包含另一个子字符串的最快方法是什么(我只需要布尔值)?您能否提出您的想法和示例代码段?
Fel*_*ing 300
你有两个可能性:
(new RegExp('word')).test(str)
// or
/word/.test(str)
Run Code Online (Sandbox Code Playgroud)str.indexOf('word') !== -1
Run Code Online (Sandbox Code Playgroud)正则表达式似乎更快(至少在Chrome 10中).
不能肯定地说哪种方法更快.浏览器之间的差异是巨大的.虽然在Chrome 10中indexOf
看起来更快,但在Safari 5中,indexOf
显然比任何其他方法都慢.
你必须看到并尝试自己.这取决于您的需求.例如,使用正则表达式时,不区分大小写的搜索会更快.
更新2018年:
为了避免人们自己运行测试,以下是大多数常见浏览器的当前结果,百分比表示下一个最快结果的性能提升(因浏览器而异):
Chrome: indexOf(快约98%)<-- wow
Firefox:缓存RegExp(快18%)
IE11:缓存RegExp(快10%)
边缘: indexOf(快18%)
Safari:缓存RegExp(快0.4%)
请注意,缓存的RegExp是:var r = new RegExp('simple'); var c = r.test(str);
而不是:/simple/.test(str)
Ste*_*ung 18
这对你有用吗?
string1.indexOf(string2) >= 0
Run Code Online (Sandbox Code Playgroud)
编辑:如果string2包含重复的模式,这可能不会比RegExp快.在某些浏览器中,indexOf可能比RegExp慢得多.看评论.
编辑2:当字符串很长和/或包含重复模式时,RegExp可能比indexOf更快.请参阅评论和@Felix的答案.
最快的
var string =“ hello”, substring =“ lo”; string.includes(substring);
var string =“ hello”, substring =“ lo”; string.indexOf(substring)!== -1;
在ES6中,该includes()
方法用于确定是否可以在另一个字符串中找到一个字符串,返回true
或false
视情况而定.
var str = 'To be, or not to be, that is the question.';
console.log(str.includes('To be')); // true
console.log(str.includes('question')); // true
console.log(str.includes('nonexistent')); // false
Run Code Online (Sandbox Code Playgroud)
这是jsperf之间
var ret = str.includes('one');
Run Code Online (Sandbox Code Playgroud)
和
var ret = (str.indexOf('one') !== -1);
Run Code Online (Sandbox Code Playgroud)
正如jsperf中显示的结果,它们似乎都表现良好.
使用.match()
方法来字符串是很简单的方法。
var re = /(AND|OR|MAYBE)/;
var str = "IT'S MAYBE BETTER WAY TO USE .MATCH() METHOD TO STRING";
console.log('Do we found something?', Boolean(str.match(re)));
Run Code Online (Sandbox Code Playgroud)
祝您有美好的一天,先生!
归档时间: |
|
查看次数: |
223760 次 |
最近记录: |