Javascript正则表达式与模式匹配,但与正则表达式文本不匹配(r.js optimizer和uglify问题)?

Javascript正则表达式与模式匹配,但与正则表达式文本不匹配(r.js optimizer和uglify问题)?,javascript,requirejs,uglifyjs,r.js,Javascript,Requirejs,Uglifyjs,R.js,我有一个主干应用程序,使用Require.js组织成模块。其中一个模块包含一个Handlebar助手,它有一个方法,我用来从每个视图的所有HTML模板中提取一个合法的标题。标题包含在HTML注释中,因此我使用以下正则表达式将其删除: /<!--[\s\S]*?-->/g 现在,不幸的是,这意味着当包含Handlebar助手的Require.js模块被拉入r.js优化构建时,助手中的regex文本被剥离出来,导致我的整个r.js构建爆炸 我已尝试通过选择性地将onBuildWrite

我有一个主干应用程序,使用Require.js组织成模块。其中一个模块包含一个Handlebar助手,它有一个方法,我用来从每个视图的所有HTML模板中提取一个合法的标题。标题包含在HTML注释中,因此我使用以下正则表达式将其删除:

/<!--[\s\S]*?-->/g
现在,不幸的是,这意味着当包含Handlebar助手的Require.js模块被拉入r.js优化构建时,助手中的regex文本被剥离出来,导致我的整个r.js构建爆炸

我已尝试通过选择性地将
onBuildWrite()
中的正则表达式应用于除帮助器之外的所有模块来解决此问题:

onBuildWrite: function (moduleName, path, contents) {
    var htmlCommentRegex = /<!--[\s\S]*?-->/g;

    if (moduleName !== "helpers/handlebars.compileClean") {
        contents = contents.replace(htmlCommentRegex, "");
    }

    return contents;
},
onBuildWrite:function(模块名、路径、内容){
var htmlCommentRegex=//g;
if(moduleName!=“helpers/handlebar.compileClean”){
contents=contents.replace(htmlCommentRegex,“”);
}
返回内容;
},
但在r.js配置中启用uglification时,这似乎不起作用正则表达式似乎仍然在整个构建脚本(包括帮助程序)上运行,导致构建崩溃

如果在r.js配置中禁用了uglify,则一切正常

有人知道为什么丑八怪会打破这个吗?切换到另一个正则表达式(即捕获HTML注释但忽略HTML注释正则表达式文字)是否可以解决问题?如果是这样,正则表达式看起来会是什么样子?

将您的正则表达式更改为:

var htmlCommentRegex = /[<]!--[\s\S]*?-->/g;
var htmlCommentRegex=/[/g;
单个字符
[
如果r.js正在将所有这些优化回原始文本,请尝试以下操作:

var commentPrefix = '<!';
var htmlCommentRegex = new Regexp(commentPrefix+'--[\s\S]*?-->', 'g');
var commentPrefix=''g';

希望它没有做足够的代码分析来撤销这种混淆。

如何将JS注入HTML?可能你的模式充当HTML注释…注入我的JS?抱歉,我没有这样做。我没有使用主干和其他东西,但你必须以某种方式将javascript加载到HTML。好吧,r.JS优化的最终结果是JS文件,而不是一个HTML版本,因此即使正则表达式文字充当HTML注释,我也不会期望错误发生在帮助器模块中正则表达式文字所在的确切位置。不过,我会再看一眼,记住这一点!或者像
/\n那样逃避它。我会尝试一下,我确实记得丑陋地抱怨unescaped字符。你知道为什么uglify会抱怨未转义字符,但JS本身对regex文本没有问题吗?@kbec只需要第二个转义。我不熟悉uglify,所以不知道。你确定它抱怨的是RE,而不是代码中的其他东西吗?嗯,错误会根据uglify设置和使用了d正则表达式。我会尝试您的建议并报告。
var htmlCommentRegex = /<\!--[\s\S]*?-->/g;
var htmlCommentRegex = new RegExp('<!'+'--[\s\S]*?-->', 'g');
var commentPrefix = '<!';
var htmlCommentRegex = new Regexp(commentPrefix+'--[\s\S]*?-->', 'g');