【问题标题】:JavaScript minification fails containing certain Regex包含某些正则表达式的 JavaScript 缩小失败
【发布时间】:2016-12-08 06:35:05
【问题描述】:

我无法缩小包含此工作 Regex 的 javascript 文件:

isValid = function (str) {
    return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
},

错误信息:

/* Minification failed. Returning unminified contents.
(2128,43-44): run-time error JS1004: Expected ';': {
(2128,45-46): run-time error JS1195: Expected expression: |
(2128,46-47): run-time error JS1014: Invalid character: \
(2128,47-48): run-time error JS1014: Invalid character: \
(2128,48-70): run-time error JS1015: Unterminated string constant: 
                                     ":<>\?]/g.test(str);
(2129,6-7)  : run-time error JS1195: Expected expression: ,
(2128,17-43): run-time error JS5017: Syntax error in regular expression: 
                                     /[~`!#$%\^&*+=\-\[\]\\';,/ 
*/

捆绑配置:

bundles.Add(new ScriptBundle("~/bundlesJs/custom").Include(
    "~/Scripts/Autogenerated/AntiHacking/antiHackingHelper.js"
));
BundleTable.EnableOptimizations = true;

如何解决?是否有需要转义的字符或者我应该包装整个正则表达式?

【问题讨论】:

  • 哦,也许我只是逃过一劫。我想我需要`before /` [~!#$%\^&*+=\-[]\\';,\/{}|\\":\?]` 我在这里试过了:regex101.com
  • 是的,做到了。我从一个 SO 答案中复制了正则表达式并获得了很多票,并且一年前我经常使用正则表达式。下次我将在使用正则表达式regex101.com 之前对其进行测试。 regex101.com 有易于阅读的错误消息。
  • 重点是你实际上可以在字符类非转义中使用/,但不是在所有浏览器中。

标签: javascript asp.net regex asp.net-mvc bundling-and-minification


【解决方案1】:

累加。对于ES5 docs,正斜杠不是特殊的正则表达式元字符。

JavaScript 正则表达式引擎始终允许在 RegExp 构造函数表示法中使用未转义的 /并且您可以在字符类中使用未转义的 / 正斜杠,即使以正则表达式文字表示法编写,试试这段代码(在 Chrome、FF 中,我也在 IE 11 中检查过):

console.log( '1//25///6'.match(/\w[/]+\w/g) );
console.log( '1//25///6'.match(RegExp("\\w/+\\w", "g")) );

但是,最佳做法转义正则表达式分隔符,以避免出现类似您遇到的问题并保持模式一致和明确的。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2017-10-02
    • 1970-01-01
    • 2017-07-25
    • 2014-11-05
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多