Javascript 为什么“/\:/u`抛出“无效转义”错误?

Javascript 为什么“/\:/u`抛出“无效转义”错误?,javascript,regex,Javascript,Regex,我有这样的代码: url.match/^https?\:\/\/[^\/:?]+?:[\/:?]|$/ui ESLint表示解析错误:无效的正则表达式:/^https?\:\/\/[^\/:?]+?:[\/:?]|$/:无效转义 我不明白为什么这个正则表达式是错误的。我应该如何修复它?不必要的转义序列对于u标志无效 \:是不必要的转义序列。当使用u标志时,这些是无效的。用:代替 规范、调试器、文档 这些是字符类之外的特殊字符的有效且必要的转义序列:\$,\,\,\*,\+ 其他转义序列如\、\!

我有这样的代码:

url.match/^https?\:\/\/[^\/:?]+?:[\/:?]|$/ui ESLint表示解析错误:无效的正则表达式:/^https?\:\/\/[^\/:?]+?:[\/:?]|$/:无效转义

我不明白为什么这个正则表达式是错误的。我应该如何修复它?

不必要的转义序列对于u标志无效 \:是不必要的转义序列。当使用u标志时,这些是无效的。用:代替

规范、调试器、文档 这些是字符类之外的特殊字符的有效且必要的转义序列:\$,\,\,\*,\+

其他转义序列如\、\!、\、\、\、\%、\&、\'、\、\、\-、\:、\;、\、\@、\、\、\、\、\、\是不必要的,因此u标志无效

详细查看所有转义规则的列表。1

像这样的工具报告 — 不过有点神秘:

/\:/u:

\: — 此标记没有特殊含义,因此被认为是错误的

至于文件方面,我刚才在

请注意,有些字符,如:、-、@等,在转义或取消转义时都没有特殊含义。 像\:,\-,\@这样的转义序列将等价于正则表达式中的文本、未转义字符等价物。 但是,在具有的正则表达式中,这些将导致无效的标识转义错误

根本原因 本说明继续指出:

这样做是为了确保与使用新转义序列(如\p或\k)的现有代码向后兼容

当该功能被提出并引入时,这是该公司不得不说的:

向后兼容性如何? 在没有u标志的正则表达式中,模式\p是p不必要的转义序列。 形式为\p{Letter}的模式可能已经存在于没有u标志的现有正则表达式中,因此我们无法在不破坏向后兼容性的情况下为这些模式赋予新的含义

因此,ECMAScript 2015在设置u标志时产生了不必要的转义序列,如\p和\p。 这使我们能够使用u标志更改正则表达式中\p{…}和\p{…}的含义,而不会破坏向后兼容性

本页还与此链接,其中提出了以下问题:

为什么RegExp/\-/u是一个语法错误? JSLint先前警告不要在RegExp中使用未转义的literal-in。 然而,转义-加上unicode标志u会在Chrome、Firefox和Edge中导致语法错误,JSLint已经删除了警告。 我只是想知道为什么上面的edge案例是一个语法错误

我做了一些小的语法调整

回复将上述GitHub回购与提案联系起来,但也以不同的方式解释了理由:

将u标志视为正则表达式的严格模式

因此,无论何时使用u标志,请记住这一点。 只要您使用u。 某些新事物变得有效,但某些其他事物也变得无效。 例如,另请参见

1:您会发现某些带有[U]的生产规则,这是一个表示Unicode模式的参数。 有关这些的解码,请参阅。

不必要的转义序列对于u标志无效 \:是不必要的转义序列。当使用u标志时,这些是无效的。用:代替

规范、调试器、文档 这些是字符类之外的特殊字符的有效且必要的转义序列:\$,\,\,\*,\+

其他转义序列如\、\!、\、\、\、\%、\&、\'、\、\、\-、\:、\;、\、\@、\、\、\、\、\、\是不必要的,因此u标志无效

详细查看所有转义规则的列表。1

像这样的工具报告 — 不过有点神秘:

/\:/u:

\: — 此标记没有特殊含义,因此被认为是错误的

至于文件方面,我刚才在

请注意,有些字符,如:、-、@等,在转义或取消转义时都没有特殊含义。 像\:,\-,\@这样的转义序列将等价于正则表达式中的文本、未转义字符等价物。 但是,在具有的正则表达式中,这些将导致无效的标识转义错误

根本原因 本说明继续指出:

这样做是为了确保与使用新转义序列(如\p或\k)的现有代码向后兼容

当该功能被提出并引入时,这是该公司不得不说的:

向后兼容性如何? 在没有u标志的正则表达式中,模式\p是p不必要的转义序列。 形式为\p{Letter}的模式可能已经存在于没有u fla的现有正则表达式中 g、 因此,在不破坏向后兼容性的情况下,我们无法赋予这些模式新的含义

因此,ECMAScript 2015在设置u标志时产生了不必要的转义序列,如\p和\p。 这使我们能够使用u标志更改正则表达式中\p{…}和\p{…}的含义,而不会破坏向后兼容性

本页还与此链接,其中提出了以下问题:

为什么RegExp/\-/u是一个语法错误? JSLint先前警告不要在RegExp中使用未转义的literal-in。 然而,转义-加上unicode标志u会在Chrome、Firefox和Edge中导致语法错误,JSLint已经删除了警告。 我只是想知道为什么上面的edge案例是一个语法错误

我做了一些小的语法调整

回复将上述GitHub回购与提案联系起来,但也以不同的方式解释了理由:

将u标志视为正则表达式的严格模式

因此,无论何时使用u标志,请记住这一点。 只要您使用u。 某些新事物变得有效,但某些其他事物也变得无效。 例如,另请参见

1:您会发现某些带有[U]的生产规则,这是一个表示Unicode模式的参数。 有关这些内容的解码,请参阅。

您不需要跳过括号中的:或/。试试看。你不需要逃避括号中的:或/。试试看。