regex.test VS string.match来知道一个string是否与正则expression式匹配
很多时候我使用stringmatch
函数来判断一个string是否与正则expression式匹配。
if(str.match(/{regex}/))
这有什么区别:
if (/{regex}/.test(str))
他们似乎给出了相同的结果?
基本用法
首先,让我们看看每个function的作用:
regexObject 。 testing ( string )
执行search正则expression式和指定string之间的匹配。 返回true或false 。
string 。 匹配 ( RegExp )
用于在匹配正则expression式的string时检索匹配项。 返回一个匹配的数组,如果没有则返回
null
。
由于null
计算结果为false
,
if ( string.match(regex) ) { // There was a match. } else { // No match. }
性能
性能有没有什么不同?
是的 。 我在MDN网站上发现了这个短信:
如果您需要知道某个string是否与正则expression式正则expression式匹配,请使用regexp.test(string)。
差异是否显着?
答案再次是YES ! 这个jsPerf我放在一起显示的差异是〜30 % – 〜60 %取决于浏览器:
结论
使用.test
如果你想更快的布尔检查。 在使用g
全局标志时,使用.match
检索所有匹配。
不要忘记考虑你的正则expression式中的全球标志:
var reg = /abc/g; !!'abcdefghi'.match(reg); // => true !!'abcdefghi'.match(reg); // => true reg.test('abcdefghi'); // => true reg.test('abcdefghi'); // => false <=
这是因为当find新的匹配项时,Regexp会跟踪lastIndex。