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

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

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

心有法竹 2019-12-06 07:06:24
我match经常使用字符串函数来知道字符串是否与正则表达式匹配。if(str.match(/{regex}/))之间有什么区别:if (/{regex}/.test(str))他们似乎给出相同的结果?
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

基本用法

首先,让我们看看每个函数的作用:


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-12-07
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

不要忘记考虑正则表达式中的全局标志:


var reg = /abc/g;

!!'abcdefghi'.match(reg); // => true

!!'abcdefghi'.match(reg); // => true

reg.test('abcdefghi');    // => true

reg.test('abcdefghi');    // => false <=

这是因为Regexp在找到新匹配项时会跟踪lastIndex。



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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号