首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFML RegEx删除javascript注释

CFML RegEx删除javascript注释
EN

Stack Overflow用户
提问于 2016-09-15 14:43:02
回答 3查看 314关注 0票数 0

我希望使用coldfusion从字符串中删除javascript注释。我目前正在使用reReplace(string, "(\/\*.*\*\/)|\s(\/\/.{1,}[\r\n])", "", "all")

这是一个测试字符串:

代码语言:javascript
复制
<script type="text/javascript">
// comment
var a=1; // another comment
/* try{if (...)}; */
var b=2;
</script>
src="//domain.com"

预期的结果是(以及我在javacript中使用replace()得到的):

代码语言:javascript
复制
<script type="text/javascript">
var a=1; 
var b=2;
</script>
src="//domain.com"

实际的CFML结果:

代码语言:javascript
复制
<script type="text/javascript">
src="//domain.com"

同样,它在javascript中工作。

如何在CFML中工作?

更新1,更具体的代码在我的应用程序。它基本上是app.cfc的OnRequest()函数中的一个小型程序。

  1. 获取页面html
  2. 删除两种类型的JS注释
  3. 平坦\r\n至r
  4. 将\n+\t替换为空格
  5. 将t替换为空格
  6. 用单个空格替换双空间
  7. 将double \r替换为单个\r
  8. 用逗号替换comma+\r

和一些真正的(但被截断的)输出:

代码语言:javascript
复制
<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&#038;ver=4.3.1' type='text/css' media='all'/>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-15 17:23:47

你可以试试这个:

代码语言:javascript
复制
<!--- 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:

代码语言:javascript
复制
Branch 1: ("\/\/[^"]*?")  ==> Capture(to replace with same later i.e., \1) URL shorthand
Branch 2: \/\*.*?\*\/     ==> MultiLine Comment
Branch 3: \/\/.*?\n       ==> SingleLine Comment

这是TryCF

票数 5
EN

Stack Overflow用户

发布于 2017-08-19 08:05:36

执行部分的解决方案。

正确的reReplace是:

代码语言:javascript
复制
reReplace(finalContent, '\/\*.*?\*\/|\s(\/\/.*?\r\n)', "", "ALL")

做下面的输出。仍然需要一些清洁,但链接和js功能不会中断!

代码语言:javascript
复制
<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&#038;ver=4.3.1' type='text/css' media='all'/> 
票数 0
EN

Stack Overflow用户

发布于 2016-09-15 15:03:55

您目前正在尝试的正则表达式模式似乎是不正确的(我已经尝试用"Online RegEx Tester“验证它并确认)。

你得把它改写成,

\/\*[\s\S]*?\*\/|([^:"]|^)\/\/.*$

下面是来自https://regex101.com/#javascript的屏幕截图(我在这里测试了上面的模式)

尝试在您的\/\*[\s\S]*?\*\/|([^:"]|^)\/\/.*$函数中使用reReplace,这将为您进行锻炼。

希望这对你有帮助!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39514017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档