Javascript中带有正则表达式的组无效

Javascript中带有正则表达式的组无效,javascript,regex,Javascript,Regex,我四处寻找解决问题的方法,但我看不到我的正则表达式的哪一部分是无效的(javascript说我有一个无效的组)。我想象我正在使用javascript的正则表达式引擎不支持的东西 我正在尝试验证我们的电话号码,如下所示: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555 我的验证表达式是: 1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})

我四处寻找解决问题的方法,但我看不到我的正则表达式的哪一部分是无效的(javascript说我有一个无效的组)。我想象我正在使用javascript的正则表达式引擎不支持的东西

我正在尝试验证我们的电话号码,如下所示:

555-555-5555
(555)555-5555
(555) 555-5555
555 555 5555
5555555555
1 555 555 5555
我的验证表达式是:

1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})
有什么建议吗?

你试过下面的方法吗

^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$
/1?[\s-]?\((\d{3})\)?[\s-](\d{3})[\s-]?(\d{4})/
在JavaScript中运行良好

但是,我的水晶球显示您正在使用传递给
RegExp
构造函数的字符串:

new RegExp("1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})")
这是错误的,因为反斜杠在字符串中有特殊的含义,所以

"1?[\s-]?\(?(\d{3})\)?[\s-]?(\d{3})[\s-]?(\d{4})"
相当于

"1?[s-]?(?(d{3}))?[s-]?(d{3})[s-]?(d{4})"
(因为
“\(“
”(“
)。这将投诉
(?(
)处的组无效。)


解决方案:要么使用正则表达式文本(
/…/
),要么在字符串中使用两倍的反斜杠。

是的,这正是我遗漏的,这解释了分组无效的原因。回答形式为“试试这个:”一行代码并没有真正的帮助。答案应该提供一个解决方案,但真正的价值来自解释OP自己的解决方案为什么不起作用。