很多时候,我使用字符串的match
函数来判断一个字符串是否匹配一个正则表达式。
if(str.match(/{regex}/))
这两种写法有什么区别:
if (/{regex}/.test(str))
看起来它们给出的结果相同?
很多时候,我使用字符串的match
函数来判断一个字符串是否匹配一个正则表达式。
if(str.match(/{regex}/))
这两种写法有什么区别:
if (/{regex}/.test(str))
看起来它们给出的结果相同?
首先,让我们看一下每个函数的作用:
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
。如果你使用全局标志g
,请使用.match
来检索所有匹配项。
.test()
。 :) - user1106925不要忘记在正则表达式中考虑全局标志:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
这是因为当找到新的匹配项时,正则表达式会跟踪 lastIndex。
.test()
设置全局标志?.test()
的目的不就是检查字符串是否与正则表达式匹配吗? - buhbang