JavaScript 正则表达式规则正在破坏 ASP.NET 缩小

Posted

技术标签:

【中文标题】JavaScript 正则表达式规则正在破坏 ASP.NET 缩小【英文标题】:JavaScript regular expression rule is breaking ASP.NET minification 【发布时间】:2013-04-12 04:42:38 【问题描述】:

我有这个功能,在所有浏览器上都能正常工作:

    cleanKey = function( key )
        return key.replace( /[^-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u37f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/g, "-" );
    ;

但是,我的 ASP.NET MVC 3 项目在尝试缩小该代码时会引发正则表达式语法错误:

运行时错误 JS5017:正则表达式中的语法错误 /[^-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u37f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/ g

【问题讨论】:

我冒昧地编辑了你的问题,因为我相信你问题的前一个草稿更好:它还包括 js 代码、相关的错误号和错误消息(对未来有用谷歌搜索)并指出(正确)正则表达式确实在大多数浏览器中都有效。 【参考方案1】:

您可能想尝试\u037f 而不是\u37f,因为MSDN specifies:

\xn 匹配 n,其中 n 是十六进制转义值。 十六进制转义值必须正好是两位数。例如,'\x41' 匹配“A”。 '\x041' 等价于 '\x04' & "1"。 允许在正则表达式中使用 ASCII 代码。

\un 匹配 n,其中 n 是一个 Unicode 字符表示为四个十六进制数字。 例如,\u00A9 匹配版权符号 (©)。

另外,我想知道,这是一个有效的范围:\xf8-\u037d(根据 asp.net 缩小工具)? 您可能想改用\u00f8-\u037d。 (也许添加\xf8-\xff 以补偿本地化代码页的上半部分与该地区的Unicode 之间的差异。)

希望这会有所帮助。

【讨论】:

【参考方案2】:

接受的答案是正确的。不过,以后你可以使用www.debuggex.com,它会立即为你突出显示错误并给你一个解释。

在这种情况下,There must be exactly four hex digits after "\u"

希望有帮助:)

【讨论】:

your 酷工具的好插件。出于好奇,\xf8-\u037d 范围呢?它不应该抓住那个吗?我的理解是“ascii”通常是一个本地化的代码页(如“win1252”)并且(除了下半部分)与 Unicode 不同(除非该网页被用作 unicode)。但我可能错了.. 对延迟回复表示歉意。两个转义序列都代表 16 位代码点。因此,只要第一个代码点小于第二个代码点,范围就有效。有关更多信息,请参阅inimino.org/~inimino/blog/javascript_cset

以上是关于JavaScript 正则表达式规则正在破坏 ASP.NET 缩小的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript学习-正则表达式

JavaScript 如何检测正则表达式?

JavaScript基础10——正则

系统认识JavaScript正则表达式

JavaScript 正则表达式Ⅰ

JavaScript中正则表达式判断匹配规则以及常用的方法