如何使用"或" JS regEx中的命令是否正确?

时间:2017-07-27 21:11:40

标签: javascript regex

我试图为JS写一个或多或少复杂的regEx。它通过了我的所有测试,除了两个,我不知道为什么。这是代码

function telephoneCheck(str) {
  regEx1 = /^[1]\s(\d{3}[-]){2}\d{4}|(\d{3}[-]){2}\d{4}$/;
  regEx2 = /^\d{10}$/;
  regEx3 = /^[1]\s(\d{3}\s){2}\d{4}|(\d{3}\s){2}\d{4}$/;
  regEx4 = /^[1]\s[(]{1}\d{3}[)]{1}\d{3}[-]{1}\d{4}|[(]{1}\d{3}[)]{1}\d{3}[-]{1}\d{4}$/;
  regEx5 = /^[1]\s[(]{1}\d{3}[)]{1}\s\d{3}[-]{1}\d{4}|[(]{1}\s\d{3}[)]{1}\d{3}[-]{1}\d{4}$/;
  if (regEx1.test(str) || regEx2.test(str) || regEx3.test(str) || regEx4.test(str) || regEx5.test(str)) {
    return true;
  }
  else {
    return false;
  }
}

这些是它没有正确传递的两个测试(两者都应该返回false但我得到true代替:telephoneCheck("2(757)622-7382")telephoneCheck("(555-555-5555") 。 我的问题是如何正确使用|(或)运算符(我认为这会使我的代码看起来更好)以及如何在regEx中描述一个表达式以匹配特定字符(例如&#34 ; 1"在数字的开头)?我是使用[1]{1}[1]$完成的,但它似乎无法正常工作。 感谢任何提示和建议!

2 个答案:

答案 0 :(得分:2)

  

如何在regEx中描述一个表达式以匹配特定字符(例如" 1"在数字的开头)

要匹配特定字符,只需使用该字符即可。 x是一个有效的正则表达式字符串,它匹配字母" x"。要匹配特殊字符,请先将其转义。正则表达式.将匹配任何字符;正则表达式\.将匹配一个句点。

请注意,正则表达式x相当于[x],因为它们会匹配相同的内容,但前者更短且更易于阅读。如果给出了选择,只需直接使用单个字符(必要时进行转义!)并忘记[ ]

您的正则表达式包含[-][(][1]等表达式。放下方括号。在第二个,你需要逃避(

[(]{1}等表达式等同于\({1}只是意味着匹配前一个项目一次。好吧,使用该项目本身也可以完成同样的事情。两个字符比六个字符短很多,这将使你的正则表达式更容易阅读。

  

如何使用| (或)操作员正确

使用|运算符非常简单。它将匹配左侧或右侧的内容。将其括在括号中以限制匹配。例如,a|bc将匹配" a"或" bc"。 (a|b)c将匹配" ac"和" bc"。

答案 1 :(得分:0)

您遇到的主要问题是,^$锚点只会在|所在的一侧发挥作用。但是,您希望其中任何一方的所有模式都与^$匹配。

因此,不是^ | $,而是^( | )$^ $|^ $

正如其他人所说,你可以简化很多。