如何用正则表达式替换特定的JavaScript注释?

时间:2012-09-05 14:16:39

标签: javascript regex ant

我有一个任务,我必须打开许多文件,搜索//@public object模式,如果没有匹配项,请删除该文件中所有之前没有//@public doc的JavaScript注释。< / p>

例如,可能有类似的内容:

//@public doc
    /**
     * @function
     * checks for specific conditions
     * specific variables
     */

并保持原样。但是需要删除所有其他JavaScript注释。

它的正则表达式是什么,以及如何实现它?

提前谢谢。

与此同时,我提出了以下解决方案

    <fileset id="jsmvcdoc.fileset" dir="${doctempfolder}" includes="**/*.js">
        <not>
         <contains text="//@public object" casesensitive="no"/>
        </not>
    </fileset>

   <!-- JS Comments -->
   <replaceregexp match="(?!doc. +)/\*.+?\*/" replace="" flags="gs" byline="false">
        <fileset refid="jsmvcdoc.fileset"/>
   </replaceregexp>

哪个过滤器文件集只包含那些不包含// @ public对象的文件,但是我不知道如何制作regexp,它将删除所有注释除了行// @ public doc

之前的注释

解决这个问题:

<!-- strip out js comments not preceeded by //@public doc -->
  <replaceregexp match="(?&lt;!//@public doc\x0D\x0A    )/\*.+?\*/" replace="" flags="gs" byline="false">
        <fileset refid="jsmvcdoc.fileset"/>
  </replaceregexp>

1 个答案:

答案 0 :(得分:2)

我会以这种方式将其分解:

  1. 选择包含该模式的文件。
  2. 在特定的正则表达式上运行替换任务。
  3. 这样的东西
    <replaceregexp byline="true">
      <regexp pattern="/\*[\d\D]*?\*/"/>
        <substitution expression=""/>
           <fileset dir="${JSfiles.path}" includes="**/*.js">
              <contains text="//@public object" casesensitive="no"/>
           </fileset>
    </replaceregexp>
    

    我还没有测试过,所以你可能需要调整一下正则表达式。