Javascript heredoc
Necesito algo como heredoc en JavaScript. ¿Tienes alguna idea para esto? Necesito funcionalidad compatible con todos los navegadores.
Quiero algo así:
heredoc = '\
<div>\
<ul>\
<li><a href="#zzz">zzz</a></li>\
</ul>\
</div>';
Respuesta #1
Prueba ES6 String Template, puedes hacer algo como
var hereDoc = `
This
is
a
Multiple
Line
String
`.trim();
console.log(hereDoc == 'This\nis\na\nMultiple\nLine\nString') // truePuedes usar esta gran función incluso en navegadores antiguos con TypeScript
Respuesta #2
No, desafortunadamente JavaScript no soporta nada como heredoc.
Respuesta #3
¿Qué tal esto?
function MyHereDoc(){
/*HERE
<div>
<p>
This is written in the HEREDOC, notice the multilines :D.
</p>
<p>
HERE
</p>
<p>
And Here
</p>
</div>
HERE*/
var here = "HERE";
var reobj = new RegExp("/\\*"+here+"\\n[\\s\\S]*?\\n"+here+"\\*/", "m");
str = reobj.exec(MyHereDoc).toString();
str = str.replace(new RegExp("/\\*"+here+"\\n",'m'),'').toString();
return str.replace(new RegExp("\\n"+here+"\\*/",'m'),'').toString();
}
//Usage
document.write(MyHereDoc());
Solo reemplaza "/*HERE" y "HERE*/" con la palabra que elijas.
Respuesta #4
Basándome en la respuesta de Zv_oDD, creé una función similar para facilitar su reutilización.
Advertencia: Esta es una característica no estándar de muchos intérpretes de JS, y probablemente será eliminada en algún momento, ¡pero como estoy construyendo un script que se usará solo en Chrome, la estoy usando! ¡No confíes nunca en esto para sitios web orientados al cliente!
// Multiline Function String - Nate Ferrero - Public Domain
function heredoc(fn) {
return fn.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1];
};
Usar :
var txt = heredoc(function () {/*
A test of horrible
Multi-line strings!
*/});
Devuelve :
"A test of horrible
Multi-line strings!"
Notas:
- El texto está recortado en ambos extremos, por lo que cualquier espacio en blanco adicional en cualquiera de los extremos está bien.
Ediciones :
2/2/2014 - cambiado para no modificar en absoluto el prototipo de la Función y usar el nombre heredoc en su lugar.
26/5/2017 - actualizado el espacio en blanco para reflejar los estándares modernos de codificación.
Respuesta #5
Dependiendo del sabor de JS/motor de JS que estés usando (SpiderMonkey, AS3) puedes simplemente escribir XML en línea, en el que puedes colocar texto en múltiples líneas, como heredoc:
var xml = <xml>
Here
is
some
multiline
text!
</xml>
console.log(xml.toXMLString())
console.log(xml.toString()) // just gets the content
Respuesta #6
Las plantillas de ES6 tienen la característica heredoc.
Puedes declarar cadenas encerradas entre comillas invertidas (` `) y pueden expandirse a través de varias líneas.
var str = `This is my template string...
and is working across lines`;
También puedes incluir expresiones dentro de las Cadenas de Plantilla. Estas se indican con el signo de dólar y llaves (${expression}).
var js = "Java Script";
var des = `Template strings can now be used in ${js} with lot of additional features`;
console.log(des); //"Template strings can now be used in Java Script with lot of additional features"
De hecho, hay más características como Cadenas de Plantilla Etiquetadas y Cadenas en Bruto en él. Por favor, consulte la documentación en
https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/template_strings
Respuesta #7
ES5 y versiones anteriores
(function(){/** some random multi line text here **/}).toString().slice(15,-5);
ES6 y versiones posteriores
`some random multi line text here`
resultado
some random multi line text here
