很多时候,我使用字符串匹配函数来知道字符串是否与正则表达式匹配。
if(str.match(/{regex}/))
这两者之间有什么区别吗:
if (/{regex}/.test(str))
它们似乎给出了相同的结果?
很多时候,我使用字符串匹配函数来知道字符串是否与正则表达式匹配。
if(str.match(/{regex}/))
这两者之间有什么区别吗:
if (/{regex}/.test(str))
它们似乎给出了相同的结果?
基本用法
首先,让我们看看每个函数做什么:
regexObject。test(字符串)
执行搜索正则表达式与指定字符串之间的匹配。返回true或false。
字符串。match(RegExp)
用于在将字符串与正则表达式匹配时检索匹配项。返回一个包含匹配项的数组,如果没有则返回null。
因为null的值为false,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
性能
在性能方面有什么不同吗?
是的。我在MDN网站上找到了这个简短的说明:
如果需要知道字符串是否与正则表达式regexp匹配,请使用regexp.test(string)。
差异显著吗?
答案再次是肯定的!我把这个jsPerf放在一起显示,根据浏览器的不同,差异是~30% - ~60%:
结论
如果你想要一个更快的布尔检查,请使用.test。当使用g全局标志时,使用.match检索所有匹配项。
不要忘记在regexp中考虑全局标志:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
这是因为当找到新的匹配时,Regexp会跟踪lastIndex。