java正则表达式删除javascript单行注释:“m”标志不起作用?

时间:2011-04-07 19:07:09

标签: java regex comments

我一直在尝试使用以下正则表达式从JavaScript文件中删除单行注释:

Pattern p = Pattern.compile("(?m)(?:[\\(|\\)|;|\\}|\\{])\\s*/{2}(.*?)$");

当我使用某些示例JavaScript源代码中的“^ $ matches line break”选项在RegexPal之类的内容中测试时,该模式有效。

但是,将它放入我的Java程序时似乎是一个问题是“m”标志似乎无法正常工作。基本上,即使我在模式的开头使用“(?m)”指定了标志(尽管我也尝试过使用Pattern.MULTILINE),但它似乎完全忽略了它$ {{ 1}}匹配整个文档末尾的所有内容,而不仅仅是EOL。

1 个答案:

答案 0 :(得分:1)

适合我:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class MultilinePattern {

   public static void main( String[] args ) {
      Pattern p = Pattern.compile("(?m)(?:[\\(|\\)|;|\\}|\\{])\\s*/{2}(.*?)$");
      String multilineJS = "var i = 1; // this is the first comment\n" + //
         " i++; // this is the second comment\n" + //
         " alert(i);";
      Matcher matcher = p.matcher(multilineJS);
      while ( matcher.find() ) {
         System.out.println(matcher.group(1));
      }
   }
}

此代码段产生:

this is the first comment
this is the second comment

用于测试模式的String中的换行符:它们对您的操作系统是否正确?你确定他们在你的弦中吗?