БлогNot. Javascript: удалить все комментарии из текста программы

Javascript: удалить все комментарии из текста программы

Цель очень простая - удалить все Си-подобные строчные (inline)

// строчный комментарий, действует до перевода строки

и блочные

/* блочный или 
  многострочный комментарий */

комментарии из некоторого текста.

Попробовал нацарапать несколько регулярок, кажется, показанная ниже работает (функция stripComments).

Предполагается кодировка Юникода utf-8.

А может, есть вариант и получше?

<h3>Data:</h3>
<pre id="stringData">/** 
 * Комменты
 * longer comments here that we can parse.
 *
 * blah-blah-blah
 */
 function subroutine() {
  a = /* inline comment */ b + c ;
 }
 /*/ <-- хитрый комментарий */
 
 /**
  * Another comment.
  */
 function something() {  //Строчный комментарий
 }
  var a=1; //Ещё строчный комментарий
</pre>
<h3>Result:</h3>
<pre id="stringResult"></pre>

<script>
function stripComments(s) {
 return s.replace(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/igm, '');
}

var txt = document.getElementById('stringData').innerHTML;
document.getElementById('stringResult').innerHTML = stripComments(txt);
</script>

Здесь просто берутся данные из элемента stringData и результат пишется в элемент stringResult. Вот что вышло:

Data:

/** 
 * Комменты
 * longer comments here that we can parse.
 *
 * blah-blah-blah
 */
 function subroutine() {
  a = /* inline comment */ b + c ;
 }
 /*/ <-- хитрый комментарий */
 
 /**
  * Another comment.
  */
 function something() {  //Строчный комментарий
 }
  var a=1; //Ещё строчный комментарий

Result:


 function subroutine() {
  a =  b + c ;
 }
 
 
 
 function something() { 
 }
  var a=1;

Напомню, что в норме вложенные многострочные комментарии не разрешены, так что этот случай регулярка обрабатывать не обязана :)


теги: памятка javascript форматы

03.10.2019, 12:38; рейтинг: 28