Búsqueda de sitios web

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') // true

Puedes 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:

  1. 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

Artículos relacionados