Me siento mal por escribir una respuesta separada para simplemente una extensión de la respuesta de @NateFerrero , pero tampoco creo que editar su respuesta sea apropiado, así que vota a @NateFerrero si esta respuesta fue útil para ti.
tl; dr: para aquellos que deseen utilizar comentarios en bloque dentro de su heredoc ...
Principalmente necesitaba heredocs de Javascript para almacenar un bloque de CSS, por ejemplo
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;
}
*/});
Sin embargo, como puede ver, me gusta comentar mi CSS y, desafortunadamente (como lo sugiere el resaltado de sintaxis), el primero */
finaliza el comentario general, rompiendo el heredoc.
Para este propósito específico (CSS), mi solución fue agregar
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
a la cadena dentro de @NateFerrero's heredoc
; en forma completa:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
y utilícelo agregando un espacio entre *
y /
para los comentarios del bloque "interno", así:
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;
}
*/});
El replace
simplemente encuentra /* ... * /
y elimina el espacio para hacer /* ... */
, preservando así la heredoc hasta que fue llamado.
Por supuesto, puede eliminar los comentarios usando
.replace(/\/\*[\s\S]*?\* \//g, '')
También puede admitir //
comentarios si los agrega a la cadena:
.replace(/^\s*\/\/.*$/mg, '')
Además, puede hacer algo diferente al espacio único entre *
y /
, como -
:
/**
* Nuke rounded corners.
*-/
si solo actualiza la expresión regular de manera adecuada:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
¿O tal vez le gustaría una cantidad arbitraria de espacios en blanco en lugar de un solo espacio?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^