我match经常使用字符串函数来知道字符串是否与正则表达式匹配。if(str.match(/{regex}/))之间有什么区别:if (/{regex}/.test(str))他们似乎给出相同的结果?
3 回答
绝地无双
TA贡献1946条经验 获得超4个赞
基本用法
首先,让我们看看每个函数的作用:
regexObject。测试(字符串)
搜索正则表达式和指定字符串之间的匹配项。返回true或false。
字符串。匹配(RegExp)
将字符串与正则表达式匹配时,用于检索匹配项。返回具有匹配项或null没有匹配项的数组。
由于null评估为false,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
性能
在性能方面有什么区别吗?
是的。我在MDN网站上找到了此简短说明:
如果您需要知道字符串是否与正则表达式regexp匹配,请使用regexp.test(string)。
差异是否显着?
答案再一次是!我放在一起的这个jsPerf显示,差异取决于浏览器是 〜30 %-〜60 %:
结论
使用.test
,如果你想更快的布尔检查。使用全局标志.match
时,用于检索所有匹配项g
。
红颜莎娜
TA贡献1842条经验 获得超12个赞
不要忘记考虑正则表达式中的全局标志:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
这是因为Regexp在找到新匹配项时会跟踪lastIndex。
添加回答
举报
0/150
提交
取消