我希望使用coldfusion从字符串中删除javascript注释。我目前正在使用reReplace(string, "(\/\*.*\*\/)|\s(\/\/.{1,}[\r\n])", "", "all")。
这是一个测试字符串:
<script type="text/javascript">
// comment
var a=1; // another comment
/* try{if (...)}; */
var b=2;
</script>
src="//domain.com"预期的结果是(以及我在javacript中使用replace()得到的):
<script type="text/javascript">
var a=1;
var b=2;
</script>
src="//domain.com"实际的CFML结果:
<script type="text/javascript">
src="//domain.com"同样,它在javascript中工作。
如何在CFML中工作?
更新1,更具体的代码在我的应用程序。它基本上是app.cfc的OnRequest()函数中的一个小型程序。
和一些真正的(但被截断的)输出:
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
//<![CDATA[
try{if (...) {...;}} catch(e){};
//]]>
// comment
var a=1; // another comment
/* try{if (...)}; */
var b=2;
</script>
<script type="text/javascript">
unsavedChanges=0;
tinymce.init({
// GENERAL
// PLUGINS
// LINK
link_list: "/pagesJSON.cfm", target_list: [
{title: 'Same Window/Tab', value: '_self'}, {title: 'New Window/Tab', value: '_blank'}
],
// FILE MANAGER
external_filemanager_path: '/filemanager/',
// IMAGE
image_advtab: true
});
</script>
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Lato%3A400%2C700%2C900&ver=4.3.1' type='text/css' media='all'/>发布于 2016-09-15 17:23:47
你可以试试这个:
<!--- JS with comment --->
<cfsavecontent variable="variables.jsWithCommment">
<script type="text/javascript">
// comment
var a=1; // another comment
/* try{if (...)}; */
var b=2;
</script>
src="//domain.com"
</cfsavecontent>
<!--- Replace with first capture for each branch --->
<cfset variables.regex = '(?:("\/\/[^"]*?")|\/\*.*?\*\/|\/\/.*?\n)'>
<cfset variables.jsWithoutComment = reReplace(variables.jsWithCommment, variables.regex, "\1", "ALL")>Regex:
Branch 1: ("\/\/[^"]*?") ==> Capture(to replace with same later i.e., \1) URL shorthand
Branch 2: \/\*.*?\*\/ ==> MultiLine Comment
Branch 3: \/\/.*?\n ==> SingleLine Comment这是TryCF。
发布于 2017-08-19 08:05:36
执行部分的解决方案。
正确的reReplace是:
reReplace(finalContent, '\/\*.*?\*\/|\s(\/\/.*?\r\n)', "", "ALL")做下面的输出。仍然需要一些清洁,但链接和js功能不会中断!
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
try{if (...) {...;}} catch(e){};
var a=1;
var b=2;
</script>
<script type="text/javascript">
unsavedChanges=0;
tinymce.init({
link_list: "/pagesJSON.cfm", target_list: [
{title: 'Same Window/Tab', value: '_self'}, {title: 'New Window/Tab', value: '_blank'}
],
external_filemanager_path: '/filemanager/',
image_advtab: true
});
</script>
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Lato%3A400%2C700%2C900&ver=4.3.1' type='text/css' media='all'/> 发布于 2016-09-15 15:03:55
您目前正在尝试的正则表达式模式似乎是不正确的(我已经尝试用"Online RegEx Tester“验证它并确认)。
你得把它改写成,
\/\*[\s\S]*?\*\/|([^:"]|^)\/\/.*$
下面是来自https://regex101.com/#javascript的屏幕截图(我在这里测试了上面的模式)

尝试在您的\/\*[\s\S]*?\*\/|([^:"]|^)\/\/.*$函数中使用reReplace,这将为您进行锻炼。
希望这对你有帮助!
https://stackoverflow.com/questions/39514017
复制相似问题