JavaScript:test vs exec

时间:2012-06-12 21:12:11

标签: javascript

我想知道检查字符串的最佳方法是什么(例如邮件,密码..Etc)。

/^...$/i.exec(a)

VS

/^...$/i.test(a)
  • exec 返回值
  • 测试 true

试验:

// 1° way
var mail = req.body.mail;
if(check(mail)){

EXEC:

// 1° way
var mail = req.body.mail;
if(check(mail)){

// 2° way
var mail = check(req.body.mail);
if(mail){

exec 测试?和什么数字(如果执行1°或2°)

测试对于这种情况更好。

  • 肯定会更快。

但最重要的是

  • 测试执行他的所有工作。虽然 exec 没有执行,但可以做更多,但我们不需要。
  • Mattias Buelens 一样,使用isMail()更合乎逻辑:是电子邮件:是或否。虽然 exec :是电子邮件:电子邮件或null - > wtf?洛尔

1 个答案:

答案 0 :(得分:18)

如果您只需要测试输入字符串以匹配正则表达式,RegExp.test是最合适的。它将为您提供boolean返回值,使其成为条件的理想选择。

RegExp.exec为您提供了一个类似数组的返回值,包含所有捕获组和匹配的索引。因此,在匹配后需要使用捕获的组或索引时,它非常有用。 (使用全局修饰符String.match时,it behaves a bit different/g进行比较)

最终,它在速度或效率方面都不重要。仍将评估正则表达式,并且所有匹配的组和索引都将通过全局RegExp对象提供(尽管强烈建议您使用返回值)。

关于if测试,这仅仅是个人品味的问题。将正则表达式测试的结果分配给具有有意义名称的变量(例如isEmail)可以提高可读性,但除此之外,它们都很好。