Мне плохо писать отдельный ответ для простого расширения ответа @NateFerrero , но я не считаю, что редактирование его ответа также уместно, поэтому, пожалуйста, проголосуйте за @NateFerrero, если этот ответ был для вас полезен.
tl; dr - для тех, кто хочет использовать блочные комментарии внутри своего heredoc ...
В основном мне нужны heredocs Javascript для хранения блока CSS, например
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
*/
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
Однако, как вы можете видеть, я люблю комментировать свой CSS, и, к сожалению (на что указывает выделение синтаксиса), первый */
завершает общий комментарий, нарушая heredoc.
Для этой конкретной цели (CSS) я решил добавить
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
в цепочку внутри @ NateFerrero's heredoc
; в полной форме:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
и используйте его, добавив пробел между *
и /
для «внутренних» комментариев блока, например:
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
* /
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
replace
Просто находит /* ... * /
и удаляет пространство , чтобы сделать /* ... */
, тем самым сохраняя Heredoc до востребования.
Конечно, вы можете полностью удалить комментарии, используя
.replace(/\/\*[\s\S]*?\* \//g, '')
Вы также можете поддержать //
комментарии, если добавите их в цепочку:
.replace(/^\s*\/\/.*$/mg, '')
Кроме того, вы можете сделать что-то другое, кроме одного пробела между *
и /
, например -
:
/**
* Nuke rounded corners.
*-/
если вы просто обновите регулярное выражение соответствующим образом:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Или, может быть, вам нужно произвольное количество пробелов вместо одного?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^