正则表达式 - 无效的量词

时间:2014-06-03 07:54:52

标签: javascript regex

我在JavaScript中使用此正则表达式来评估给定字符串是否与某些德语电话号码模式匹配。

var reg = new RegExp("(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[/–-]\s*)?)?\d+(?:\s*(?:[\s/–-]\s*)?\d+)*");

使用时我收到此错误:

SyntaxError: invalid quantifier

...eg = new RegExp("(?:\+\d+)\s*(?:\(\d+\)\s*(?:[/–-]\s*))\d+(?:\s*(?:[\s/–-]\s*)\d...

我努力学习阅读正则表达式,但还不能完全理解它们。我没有自己写这个表达,我很难理解它。

为什么我收到此错误?

2 个答案:

答案 0 :(得分:4)

因为您使用的是字符串文字,所以需要转义每个反斜杠:

(?:\\+\\d+)?\\s*(?:\\(\\d+\\)\\s*(?:[/–-]\\s*)?)?\\d+(?:\\s*(?:[\\s/–-]\\s*)?\\d+)*

另一种解决方案是使用正则表达式文字:

var reg = /(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[\/–-]\s*)?)?\d+(?:\s*(?:[\s\/–-]\s*)?\d+)*/;

答案 1 :(得分:2)

new RegExp需要一个字符串,因为反斜杠已经在字符串内部有意义,所以需要再次对它们进行转义。

但是,在您的情况下,您使用的是静态模式,因此您最好使用文字:

var reg = /(?:\+\d+)?\s*(?:\(\d+\)\s*(?:[\/–-]\s*)?)?\d+(?:\s*(?:[\s\/–-]\s*)?\d+)*/;

请注意,您需要在此处转义/;)

作为附加提示,您可以通过为文字[+]执行+之类的操作来简化在某种程度上逃避事物的需要。我认为它看起来比\+更好,但这只是我的观点。