13

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

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

对比

/^...$/i.test(a)
  • 执行返回值
  • 测试为真

测试:

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

执行:

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

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

执行还是测试?以及什么数字(如果执行,则为 1° 或 2°)

解决方案

test更适合这种情况。

  • 它肯定会更快。

但最重要的

  • 测试完成了他的所有工作。虽然exec没有执行,因为可以做更多的事情,但我们不需要。
  • 就像Mattias Buelens 所说,使用 isMail() 更合乎逻辑:是电子邮件:是或否。而exec : 是电子邮件:电子邮件或 null -> wtf ?哈哈
4

1 回答 1

19

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

RegExp.exec为您提供包含所有捕获组和匹配索引的类似数组的返回值。因此,当您需要在匹配后处理捕获的组或索引时,它很有用。(此外,与使用全局修饰符时相比,它的行为有点不同String.match/g

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

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

于 2012-06-12T21:21:26.303 回答