2016-06-23 8 views
10

mam długi łańcuch, który buduję użyciu ES6 ciągi szablonów, ale chcę go mieć bez przerwy liniowych:Szablon Struny ES6 zapobiec podziały wiersza

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); 

Wynik:

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: 

My oczekiwanie:

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

uciec przed linią podziału z ukośnikiem '\\' i zniknie w wynikach, nawet w łańcuchach szablonów. – dandavis

Odpowiedz

10

Podział wiersza to podział wiersza ... Jeśli wykonasz je ręcznie, uważam, że można je uzyskać podczas pracy.

BTW uważam, że trzy obejścia teraz:

  1. Konfiguracja IDE lub edytor kodu do zrobienia zawijany, więc nie będzie trzeba dodać podziały wiersza w kodzie, jeśli nie są potrzebne : twój edytor złamie twój kod w dwóch lub więcej liniach, jeśli każde zdanie kodu wykracza poza skonfigurowane maksymalne znaki.

  2. Usuń podziały wiersza z 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,""); 

Uwaga: tutaj używasz funkcji Runtime sformatować kod buildtime, która może wyglądać anty-wzór, i mieć wpływ na wydajność

  1. Wykonaj następujące podziałki linii kodu za pomocą konkatenacji:
 
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:`; 

W moim przypadku, pójdę z # 1 opcja.

+1

Trzecia opcja wygląda na wygodną, ​​dzięki! –

+1

Drugi przykład nie działa poprawnie. Ma duże odstępy między liniami. – jaybee

+0

@dannyid co masz na myśli przez * duże luki *? Czy zawiera więcej znaków niż podział wiersza? –

9

ja osobiście wolę wygląd łączący tablicę zamiast:

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

Ta metoda jest również szybsza niż konkatenacje używające '+', ponieważ tworzy ona tylko jeden wewnętrzny StringBuilder dla całego zestawu zamiast jednego dla każdej konkatenacji (choć jest to mikrooptymalizacja) – Vinno97

+0

Running funkcja runtime dla celów formatowania kodu ... Downvote. Wpływ na wydajność? –

9

Jeśli masz ES6 można używać znaczników. Na przykład, the stripIndent tag from the common-tags library:

zainstalować poprzez:

npm install common-tags --save 

Wymagaj poprzez:

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

Użyj jako:

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

Więcej informacji na temat wyżej wymienionej common-tagów linku, jak również jak na this blog

+2

+1 dla biblioteki i wzmianki o tagach ES6. W tym przypadku jednak myślę, że OP potrzebowałby tagu ['oneLine'] (https://github.com/declandewet/common-tags#oneline) z biblioteki' common-tags'. – lando

+0

Uruchamianie funkcji środowiska wykonawczego w celu formatowania kodu ... Dowolne. Chociaż lib jest całkiem przydatna i dziękuję za udostępnienie; w tym szczególnym przypadkiem użycia stwierdza, że ​​"tworzy ciąg znaków za pomocą szablonu es6", czyli czas budowy. Wpływ na wydajność? –

0

To jest szalone.

Prawie każda odpowiedź tutaj proponuję uruchomienie funkcji czas pracy w celu dobrego formatu, buildtime tekst źle sformatowane oO ja jestem jedyną osobą wstrząśnięty tym fakcie, a zwłaszcza wpływu na wydajność ???

Jak stwierdził @dandavis The official solution, (które btw jest także historyczny rozwiązanie dla skryptów powłoki UNIX), jest Espace powrót karetki, dobrze, z charakterem espace: \

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

Proste , wydajne, oficjalne, czytelne i podobne do powłoki w procesie