我正在尝试匹配字符串中的所有英国电话号码。
这种模式是:
^\(?(?:(?: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 +)?)$ /:组无效
答案 0 :(得分:4)
错误已经显示问题所在。字符串文字中的\
是转义字符。但是,逃避不需要转义的角色只会“丢弃”\
:
console.log('\(');
因此,您传递给正则表达式引擎的值(以及错误显示的内容)是:
^(?(?...
(注意:没有反斜杠)
和(?(
不是正则表达式中的有效字符序列。
你要么
"\\("
)RegExp("string")
(/^.../
)。