将正则表达式从.NET转换为javascript的错误

Pac*_*ier 6 javascript c# vb.net web-services

我有这条VBNet代码,我想将其翻译成javascript:

  Dim phone_check_pattern = "^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$"
    System.Diagnostics.Debug.WriteLine(System.Text.RegularExpressions.Regex.IsMatch("test input", phone_check_pattern))
Run Code Online (Sandbox Code Playgroud)

我的翻译结果:

var phone_check_pattern = "^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$";
alert(new RegExp(phone_check_pattern).test("test input"))
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它有错误 Uncaught SyntaxError: Invalid regular expression:: Nothing to repeat

(我的VbNet代码没有任何错误)

有谁知道是什么导致了这个问题?

T.J*_*der 7

在JavaScript字符串中的反斜杠字符是一个转义字符,让你有反斜杠在字符串中的转义下一个字符的字符串,而不是正则表达式.所以就在接近开头的时候,在你"^(\+?的反斜杠中,只是逃避了+ 字符串(它不需要),而正则表达式看到的只是一个+没有重复的原始内容.因此错误.

幸运的是,JavaScript有正则表达式的字面语法(用/字符分隔),这可能是一个更好的起点:

var re = /^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.\/-]|\([ 0-9.\/-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.\/-]|\([ 0-9.\/-]+\)))?$/;
alert(re.test("test input"));
Run Code Online (Sandbox Code Playgroud)

然后至少反斜杠在正则表达式中逃逸,而不是字符串.(注意,因为/是正则表达式文字的分隔符,我们必须将其转义(使用反斜杠).)

我没有详尽地审查实际的正则表达式,但这应该让你开始.

更多关于规范正则表达式文字,当然还有MDC.