Je me sens mal écrit une réponse distincte pour seulement une extension de @NateFerrero de la réponse, mais je ne ressens pas l'édition de sa réponse est appropriée, veuillez donc upvote @NateFerrero si cette réponse a été utile pour vous.
tl;dr-Pour ceux qui souhaitent utiliser le bloc de commentaires à l'intérieur de leur heredoc...
J'ai surtout besoin de Javascript heredocs 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, je tiens à commenter mon CSS, et malheureusement (comme évoqué par la coloration syntaxique) de la première */
se termine le commentaire général, la rupture de la heredoc.
Pour ce but précis (CSS), ma solution est d'ajouter
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
de la chaîne à l'intérieur de @NateFerrero de l' heredoc
; en remplir le formulaire:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
et de l'utiliser par l'ajout d'un espace entre l' *
et /
pour les "intérieure" bloquer les commentaires, comme suit:
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;
}
*/});
L' replace
trouve tout simplement /* ... * /
et supprime l'espace pour faire /* ... */
, ce qui permet de préserver la heredoc jusqu'appelé.
Vous pouvez bien sûr supprimer les commentaires complètement à l'aide de
.replace(/\/\*[\s\S]*?\* \//g, '')
Vous pouvez également appuyer //
commentaires si vous les ajoutez à la chaîne:
.replace(/^\s*\/\/.*$/mg, '')
Aussi, vous pouvez faire autre chose que de la simple espace entre *
et /
, comme un -
:
/**
* Nuke rounded corners.
*-/
si vous venez de mettre à jour les regex de façon appropriée:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Ou peut être voulez-vous une quantité arbitraire d'espaces au lieu d'un seul espace?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^