Je me sens mal d'écrire une réponse séparée pour simplement une extension de la réponse de @ NateFerrero , mais je ne pense pas que la modification de sa réponse soit appropriée non plus, alors veuillez voter @NateFerrero si cette réponse vous a été utile.
tl; dr - Pour ceux qui souhaitent utiliser des commentaires en bloc dans leur heredoc ...
J'avais principalement besoin de heredocs Javascript pour stocker un bloc de CSS, par exemple
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;
}
*/});
Comme vous pouvez le voir cependant, j'aime commenter mon CSS, et malheureusement (comme l'indique la coloration syntaxique) le premier */
termine le commentaire global, cassant l'hérédoc.
Dans ce but précis (CSS), ma solution de contournement était d'ajouter
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
à la chaîne à l'intérieur de @ NateFerrero heredoc
; sous forme complète:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
et utilisez-le en ajoutant un espace entre le *
et /
pour les commentaires du bloc "interne", comme ceci:
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;
}
*/});
Le replace
trouve /* ... * /
et supprime simplement l'espace à faire /* ... */
, préservant ainsi l'hérédoc jusqu'à l'appel.
Vous pouvez bien sûr supprimer complètement les commentaires en utilisant
.replace(/\/\*[\s\S]*?\* \//g, '')
Vous pouvez également prendre en charge les //
commentaires si vous les ajoutez à la chaîne:
.replace(/^\s*\/\/.*$/mg, '')
En outre, vous pouvez faire autre chose que l'espace unique entre *
et /
, comme un -
:
/**
* Nuke rounded corners.
*-/
si vous mettez simplement à jour l'expression régulière de manière appropriée:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Ou peut-être souhaitez-vous une quantité arbitraire d'espaces blancs au lieu d'un seul espace?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^