Źle się czuję, pisząc osobną odpowiedź jako rozszerzenie odpowiedzi @ NateFerrero , ale nie uważam, że edycja jego odpowiedzi jest odpowiednia, więc proszę, zagłosuj na @NateFerrero, jeśli ta odpowiedź była dla Ciebie przydatna.
tl; dr - Dla tych, którzy chcą używać komentarzy blokowych w swoim heredoc ...
Potrzebowałem głównie heredoców Javascript do przechowywania bloku CSS, np
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;
}
*/});
Jak widać jednak, lubię komentować mój CSS i niestety (jak sugeruje podświetlanie składni) pierwszy */
kończy ogólny komentarz, łamiąc heredoc.
W tym konkretnym celu (CSS) moim obejściem było dodanie
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
do łańcucha wewnątrz @ NateFerrero's heredoc
; w pełnej formie:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
i użyj go, dodając spację między *
i /
dla komentarzy do bloku „wewnętrznego”, na przykład:
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;
}
*/});
Po replace
prostu znajduje /* ... * /
i usuwa przestrzeń do zrobienia /* ... */
, zachowując w ten sposób heredoc do czasu wezwania.
Możesz oczywiście całkowicie usunąć komentarze za pomocą
.replace(/\/\*[\s\S]*?\* \//g, '')
Możesz również wspierać //
komentarze, jeśli dodasz je do łańcucha:
.replace(/^\s*\/\/.*$/mg, '')
Możesz także zrobić coś innego niż pojedyncza spacja między *
i /
, na przykład -
:
/**
* Nuke rounded corners.
*-/
jeśli tylko odpowiednio zaktualizujesz wyrażenie regularne:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
A może wolisz dowolną ilość białych znaków zamiast pojedynczej spacji?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^