Java регулярное выражение для удаления однострочных комментариев JavaScript: флаг "м" не работает? - PullRequest
2 голосов
/ 07 апреля 2011

Я пытался удалить однострочные комментарии из файлов JavaScript, используя приведенное ниже регулярное выражение:

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

Шаблон работает, когда я тестирую его в чем-то вроде RegexPal , используяПараметр «^ $ соответствует разрыву строки» в некотором примере исходного кода JavaScript.

Однако при помещении его в мою Java-программу возникает проблема, заключающаяся в том, что флаг «m» работает неправильно.По сути, даже несмотря на то, что я указываю флаг, используя «(? M)» в начале шаблона (хотя я также пытался использовать Pattern.MULTILINE), кажется, что он полностью игнорируется, что делает мое соответствие $все до конца всего документа, а не только EOL.

1 Ответ

1 голос
/ 07 апреля 2011

у меня работает:

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

Как насчет разрывов строк в строке, которую вы используете для проверки шаблона: они подходят для вашей ОС? Вы уверены, что они вообще в вашей строке?

...