JavaScript正则表达式规则打破了ASP.NET缩小

时间:2013-04-18 21:42:32

标签: javascript asp.net regex

我有这个功能,它适用于所有浏览器:

    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]/克

2 个答案:

答案 0 :(得分:5)

您可能希望\u037f代替\u37fMSDN specifies

  

<强> \ XN
  匹配n,其中n是十六进制转义值   十六进制转义值必须正好是两位数   例如,'\ x41'匹配“A”。 '\ x041'相当于'\ x04'&amp; “1”。
  允许ASCII代码用于正则表达式。

     

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

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

希望这有帮助。

答案 1 :(得分:0)

接受的答案是正确的。但是,将来您可以使用www.debuggex.com,它会立即为您突出显示错误并给您解释。

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

希望有所帮助:)