gdo*_*ica 272 javascript regex performance
很多时候我使用字符串match
函数来知道字符串是否与正则表达式匹配.
if(str.match(/{regex}/))
Run Code Online (Sandbox Code Playgroud)
这有什么区别:
if (/{regex}/.test(str))
Run Code Online (Sandbox Code Playgroud)
他们似乎给出了相同的结果?
gdo*_*ica 418
首先,让我们看看每个函数的作用:
regexObject.测试(字符串)
执行正则表达式与指定字符串之间匹配的搜索.返回true或false.
字符串.匹配(RegExp)
用于在将字符串与正则表达式匹配时检索匹配项.返回包含匹配项的数组,
null
如果没有匹配项.
自null
评估到false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Run Code Online (Sandbox Code Playgroud)
表现有什么不同吗?
是的.我在MDN网站上发现了这个简短的说明:
如果您需要知道字符串是否与正则表达式regexp匹配,请使用regexp.test(string).
差异显着吗?
答案再一次是肯定的!我把这个jsPerf放在一起显示差异是 ~30% - ~60%取决于浏览器:
使用.test
,如果你想更快的布尔检查.用于.match
在使用g
全局标志时检索所有匹配项.
gto*_*nie 101
不要忘记考虑正则表达式中的全局标志:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Run Code Online (Sandbox Code Playgroud)
这是因为当找到新匹配时,Regexp会跟踪lastIndex.
归档时间: |
|
查看次数: |
122471 次 |
最近记录: |