我无法缩小包含此工作 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;
如何解决这个问题?是否有一个字符需要转义或者我应该包装整个正则表达式?
最佳答案
根据。至 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")) );
但是,最佳实践是转义正则表达式分隔符以避免任何类似您遇到的问题,并保持模式一致和明确。
关于包含某些正则表达式的 JavaScript 缩小失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41033214/