Regex для удаления многострочных комментариев - PullRequest
6 голосов
/ 17 марта 2010

Я пытаюсь использовать это регулярное выражение (JS):

/\/\*(.*)\*\//g

заменить

/*
sdandsads
*/

ни с чем.

Но это не работает! Зачем? о_О

Ответы [ 2 ]

13 голосов
/ 17 марта 2010

точка перехватывает все, кроме перевода строки .. (, если точка ложна )

, поэтому либо используйте точку входа (, как указано в других ответах / комментариях, это не поддерживается в javascript, но я оставлю это здесь для справки )

/\/\*(.*)\*\//gs

или добавьте символы пробела \s в свои выражения

/\/\*((\s|.)*?)\*\//g

Алан упомянул в своем комментарии плохую производительность из ответа, который я дал, поэтому используйте вместо этого следующее ... (, что переводит во все пробелы и все без пробелов, поэтому все .. )

/\/\*([\s\S]*?)\*\//g
4 голосов
/ 17 марта 2010

Две проблемы:

  1. В JavaScript нет модификатора dotall. Вам нужно будет использовать хак, чтобы разрешить сопоставление новых строк, например, [^].
  2. Вы используете жадное сопоставление. Если в ваших входных данных есть несколько комментариев, все между ними будет съедено.

Решение:

/\/\*[^]*?\*\//g

Пример:

> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '')
qqq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...