为了账号安全,请及时绑定邮箱和手机立即绑定

regex.test与VS string.match来了解字符串是否与正则表达式匹配

regex.test与VS string.match来了解字符串是否与正则表达式匹配

我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 %:

//img1.sycdn.imooc.com//5db004690001281e09580488.jpg

结论

使用.test,如果你想更快的布尔检查。使用全局标志.match时,用于检索所有匹配项g


查看完整回答
反对 回复 2019-10-23
?
红颜莎娜

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。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 566 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信