包含某些正则表达式的 JavaScript 缩小失败

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

我无法缩小包含此工作 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/

相关文章:

javascript - 在 Javascript 中获取关联数组的索引

javascript - 打印使用 itextsharp 创建的 PDF

asp.net - CORS 适用于对 API 的直接请求,但不适用于静态文件(如 css)

javascript - 用于接受带有tone char(') 的希腊字符的正则表达式

python - 如果是分号,则匹配除最后一个字符之外的所有字符

javascript - 如果在 JavaScript 中为 null 或 undefined,则替换值

javascript - js检查元素是否在数组中

javascript - 从 ajax fullCalendar 获取悬停日期

asp.net - 如何保护 ajax 处理程序的安全?

c# - 如何替换前导空格但保留多行?