我怎样才能让我的javascript正则表达式只接受右括号(如果它已经匹配左括号)

问题描述 投票:0回答:1

我正在尝试制作一个仅接受列出格式的电话号码的正则表达式。但是,如果我用右括号结束第一个三位数组,而在开始时没有左括号,则当我希望它返回 false 时,测试将返回 true。我能做什么?

1 555-555-5555
1 (555) 555-5555
1(555)555-5555
1 555 555 5555
5555555555
555-555-5555
(555)555-5555

const validNumbers = /^[1]? ?[(]?[0-9]{3}[)]?\s?[0-9]{3}[-\s]?[0-9]{4}$/i

console.log(validNumbers.test("1 305) 9759003"))
javascript regex
1个回答
0
投票

如果您只想在得到左括号时匹配右括号,则必须区分两种模式:

  • 有一个左括号、3 个数字和一个右括号,或者
  • 只有3个数字

生成的正则表达式如下所示:

const validNumbers = /^[1]? ?([(][0-9]{3}[)]|[0-9]{3})\s?[0-9]{3}[-\s]?[0-9]{4}$/i

Regex 无法“记住”它之前是否找到了括号。这就是为什么你必须明确区分这两种情况。

对于您的测试字符串,我们得到以下内容:

>>> console.log(validNumbers.test("1 305) 9759003"))
false

>>> console.log(validNumbers.test("1 (305) 9759003")) 
true
© www.soinside.com 2019 - 2024. All rights reserved.