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 缩小的主要内容,如果未能解决你的问题,请参考以下文章