我多次使用字符串match
函数来了解字符串是否与正则表达式匹配。
if(str.match(/{regex}/))
这有什么区别:
if (/{regex}/.test(str))
他们似乎给出了相同的结果?
答案 0 :(得分:400)
首先,让我们看看每个函数的作用:
regexObject 。 test ( String )
执行正则表达式与指定字符串之间匹配的搜索。返回 true 或 false 。
字符串。 match ( RegExp )
用于在将字符串与正则表达式匹配时检索匹配项。返回一个匹配的数组,如果没有,则返回
null
。
由于null
评估为false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
表现有什么不同吗?
是即可。我在MDN site:
中找到了这个简短的说明如果您需要知道字符串是否与正则表达式regexp匹配,请使用regexp.test(string)。
差异显着吗?
答案再次是是!我将jsPerf放在一起显示差异 ~30% - ~60%,具体取决于浏览器:
如果您想要更快的布尔检查,请使用.test
。使用.match
全局标记时,使用g
检索所有匹配项。
答案 1 :(得分:92)
不要忘记考虑正则表达式中的全局标志:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
这是因为Regexp会在找到新匹配时跟踪lastIndex。
答案 2 :(得分:1)
测试4,267,740 ops / sec±1.32%(已采样60个运行)
exec 3,649,719 ops / sec±2.51%(已采样60个运行)
匹配3,623,125 ops / sec±1.85%(62次运行采样)
索引6,230,325 ops / sec±0.95%(采样了62个运行)
test方法比match方法快,但是最快的方法是indexOf