Jak mogę odczytać podział wiersza z wartości za pomocą JavaScript i zastąpić wszystkie podziały wiersza <br />
elementami?
Przykład:
Zmienna przekazana z PHP jak poniżej:
"This is man.
Man like dog.
Man like to drink.
Man is the king."
Chciałbym, aby mój wynik wyglądał tak po konwersji JavaScript:
"This is man<br /><br />Man like dog.<br />Man like to drink.<br /><br />Man is the king."
javascript
Jin Yong
źródło
źródło
Odpowiedzi:
Spowoduje to przekształcenie wszystkich zwrotów w HTML
Jeśli zastanawiasz się, co?: Oznacza. Nazywa się to grupą nie przechwytującą. Oznacza to, że grupa wyrażeń regularnych w nawiasach nie zostanie zapisana w pamięci, do której można będzie się później odwoływać. Możesz sprawdzić te wątki, aby uzyskać więcej informacji:
https://stackoverflow.com/a/11530881/5042169 https://stackoverflow.com/a/36524555/5042169
źródło
str.replace("\n", '<br />')
(pierwszy argument jest ciągiem zwykłym) zastąpi tylko pierwsze wystąpienie.String#replace
swój pierwszy argumentString
do uciekającejRegExp
instancji, bez flag.str.replace('\n', '<br />');
jest równoznaczne zstr.replace(new RegExp('\n'), '<br />');
str.split("\n").join("<br />")
jsperf.com/split-join-vs-replace-regex RegEx wydaje się nieco szybszyJeśli Twoim zmartwieniem jest wyświetlanie przełamań linii, możesz to zrobić za pomocą CSS.
Jsfiddle: https://jsfiddle.net/5bvtL6do/2/
Uwaga : Zwróć uwagę na formatowanie i wcięcie kodu, ponieważ
white-space: pre-line
wyświetli się wszystkie nowe wiersze (z wyjątkiem ostatniego nowego wiersza po tekście, patrz skrzypce).źródło
white-space: pre-wrap;
wolę używaćwhite-space: pre-line;
(nie dodawać w końcu ostatniej linii podziału)Bez wyrażenia regularnego:
źródło
\\n
nie pasuje do nowej linii, ponieważ szukabackslash
+n
.Działa to w przypadku danych wejściowych z obszaru tekstowego
źródło
Jeśli zaakceptowana odpowiedź nie jest dla Ciebie odpowiednia, możesz spróbować.
To zadziałało dla mnie.
źródło
new RegExp('\n', 'g')
jest identyczny z/\n/g
(z wyjątkiem kilku drobiazgów na temat używania prymitywnych literałów w porównaniu z ich konstruktorami)./\n/g
jako ciąg!Niezależnie od systemu:
źródło
Ważne jest również zakodowanie pozostałej części tekstu, aby zabezpieczyć się przed możliwymi atakami skryptowymi
źródło
To działało dla mnie, gdy wartość pochodziła z TextBox:
źródło
Dla tych z Was, którzy chcą tylko pozwolić na maks. 2
<br>
z rzędu możesz użyć tego:Pierwszy wiersz: wyszukaj
\n
OR,\r\n
gdzie przynajmniej 2 z nich są w rzędzie, np\n\n\n\n
. Następnie zamień na 2br
Drugi wiersz: Wyszukaj wszystkie pojedyncze
\r\n
lub\n
zamień je na<br>
źródło
jeśli wysyłasz zmienną z PHP, możesz ją uzyskać w ten sposób przed wysłaniem:
źródło
str = str.replace(/\n/g, '<br>')
str = str.replace(/\n*\n/g, '<br>')
źródło
str = str.replace(/\n+/g, '<br>')
w drugim przypadkuNie odpowiadam na konkretne pytanie, ale jestem pewien, że to pomoże komuś ...
Jeśli masz dane wyjściowe z PHP, które chcesz wyrenderować na stronie internetowej za pomocą JavaScript (być może w wyniku żądania Ajax), a chcesz po prostu zachować białe znaki i podziały wierszy, rozważ umieszczenie tekstu w
<pre></pre>
bloku:źródło
Próbować
źródło