regex.test和string.match用于判断一个字符串是否匹配一个正则表达式。

8 浏览
0 Comments

regex.test和string.match用于判断一个字符串是否匹配一个正则表达式。

很多时候我使用字符串的match函数来确定一个字符串是否与正则表达式匹配。

if(str.match(/{regex}/))

这两种方式有什么不同吗:

if (/{regex}/.test(str))

它们似乎给出了相同的结果?

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi');    // => true
reg.test('abcdefghi');    // => false <=

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

0
0 Comments

基本用法

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

regexObject.test( String )

执行在指定的字符串中正则表达式的匹配,并返回true或false。

string.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 vs match | Performance Test

结论

如果您希望进行更快的布尔值检查,请使用.test。使用.match在使用全局标志g时检索所有匹配项。

0