为什么这是一个无效的正则表达式?

时间:2018-04-30 16:48:59

标签: javascript regex

我正在尝试匹配字符串中的所有英国电话号码。

这种模式是:

^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$

但是当我尝试发起一个新的RegExp时:



const myRegex = RegExp('^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$','g');




我收到此错误:

  

Uncaught SyntaxError:无效的正则表达式:/ ^(?(?:( ?: 0(?:0 | 11))?[s - ]?(?| +)44)?[s - ]?(? (?:0)[S - ] | 0)(?:d {2})[S - ] d {4} [S - ] d {4} | d {3}?(?)???? )[S - ] d {3} [S - ] d {3,4} |????d {4})[S - ](?: d {5} |?d {3} [S-] ????d {3})| d {5})[S - ] d {4,5} | 8(:00 [秒 - ] 11 [S - ] 11 | 45 [S - ] 46???? [s - ]?4d))(?:(?:[s - ]?(?:x | ext。?s?|#)d +)?)$ /:组无效

1 个答案:

答案 0 :(得分:4)

错误已经显示问题所在。字符串文字中的\是转义字符。但是,逃避不需要转义的角色只会“丢弃”\

console.log('\(');

因此,您传递给正则表达式引擎的值(以及错误显示的内容)是:

^(?(?...

(注意:没有反斜杠)

(?(不是正则表达式中的有效字符序列。

你要么