2016-06-23 19 views
10

ho una lunga stringa, che costruisco con ES6 stringhe di modello, ma voglio che sia privo di interruzioni di riga:Stringhe modello ES6 prevenire interruzioni di riga

var string = `As all string substitutions in Template Strings are JavaScript 
       expressions, we can substitute a lot more than variable names. 
       For example, below we can use expression interpolation to 
       embed for some readable inline math:` 
console.log(string); 

Risultato:

As all string substitutions in Template Strings are JavaScript 
    expressions, we can substitute a lot more than variable names. 
    For example, below we can use expression interpolation to 
    embed for some readable inline math: 

mio aspettativa:

As all string substitutions in Template Strings are JavaScript expressions, we can substitute a lot more than variable names. For example, below we can use expression interpolation to embed for some readable inline math: 
+5

sfugge l'interruzione di riga con una barra '\\' e scomparirà nell'output, anche nelle stringhe di template. – dandavis

risposta

10

Un'interruzione di riga è un'interruzione di riga ... Se le si producono manualmente, trovo molto prevedibile che le si ottengano durante l'esecuzione.

proposito, trovo tre soluzioni alternative per ora:

  1. Configurare l'IDE o editor di codice per fare ritorno a capo automatico in modo che non sarà necessario aggiungere interruzioni di riga nel codice se non ne hanno bisogno : il tuo editor spezzerà il tuo codice in due o più righe se ogni frase del codice va oltre i caratteri massimi configurati.

  2. linea di rimuovere le interruzioni con String.prototype.replace:

 
var string = `As all string substitutions in Template Strings are JavaScript 
expressions, we can substitute a lot more than variable names. 
For example, below we can use expression interpolation to 
embed for some readable inline math:`.replace(/\n/gm,""); 

Attenzione: qui si sta eseguendo una funzione di runtime per formattare il vostro codice di buildtime, che potrebbe apparire come un anti-modello, e avere un impatto sulle prestazioni

  1. Eseguire queste interruzioni di riga di codice utilizzando le concatenazioni:
 
var string = `As all string substitutions in Template Strings are JavaScript` 
       + `expressions, we can substitute a lot more than variable names.` 
       + `For example, below we can use expression interpolation to` 
       + `embed for some readable inline math:`; 

Nel mio caso, vorrei andare con 1 # opzione.

+1

La terza opzione sembra comoda, grazie! –

+1

Il secondo esempio non funziona correttamente. Ha grandi spazi tra le linee. – jaybee

+0

@dannyid cosa intendi per * grandi lacune *? Contiene più caratteri dell'interruzione di riga? –

9

Io personalmente preferisco l'aspetto di unire un array invece:

var string = [ 
    `As all string substitutions in Template Strings are JavaScript`, 
    `expressions, we can substitute a lot more than variable names.`, 
    `For example, below we can use expression interpolation to`, 
    `embed for some readable inline math:` 
].join(' '); 
+0

Questo metodo è anche più veloce delle concatenazioni usando '+', poiché questo crea solo uno StringBuilder interno per l'intero set invece di uno per ogni concatenazione (sebbene si tratti di una micro ottimizzazione) – Vinno97

+0

In esecuzione una funzione di runtime per lo scopo di formattazione del codice ... Downvote. Impatto sulle prestazioni? –

9

Se avete ES6, è possibile utilizzare i tag. Per esempio, the stripIndent tag from the common-tags library:

installare tramite:

npm install common-tags --save 

Richiede via:

const stripIndent = require('common-tags/lib/stripIndent') 

Usa come:

stripIndent` 
    As all string substitutions in Template Strings are JavaScript 
    expressions, we can substitute a lot more than variable names. 
    For example, below we can use expression interpolation to 
    embed for some readable inline math:   
` 

Maggiori informazioni sul suddetto collegamento comuni-tag come pure come su this blog

+2

+1 per la libreria e menzione dei tag ES6. In questo caso, tuttavia, penso che OP abbia bisogno del tag ['oneLine'] (https://github.com/declandewet/common-tags#oneline) dalla libreria' common-tags'. – lando

+0

Esecuzione di una funzione di runtime per lo scopo di formattazione del codice ... A valle. Anche se la lib è piuttosto utile, e grazie per averla condivisa; per questo caso d'uso speciale, afferma che "costruisce la stringa usando il modello es6", significa buildtime .. Impatto sulle prestazioni? –

0

Questo è folle.

Quasi ogni singolo risposta qui suggeriscono l'esecuzione di una funzione di runtime al fine di ben formato, buildtime cattivo testo formattato oO Am io l'unico colpito da questo fatto, in particolare impatto sulle prestazioni ???

Come affermato dal @dandavis, il official solution, (che poi è anche la soluzione storico per script di shell Unix), vale a espace il ritorno del carrello, così, con il carattere espace: \

`foo \ 
bar` === 'foo bar' 

Simple , performante, ufficiale, leggibile e shell-like nel processo

Problemi correlati