JavaScript - jak podzielić ciąg znaków przez znak nowej linii?
W tym artykule przyjrzymy się temu, jak podzielić ciąg znaków na oddzielne wiersze.
Szybki przegląd:
- Rozwiązanie dla Linux i Windows:
// ONLINE-RUNNER:browser;
var text = '1\r\n2\r\n3';
var lines = text.split(/\r?\n/); // \r\n or \n
console.log(lines);
- Rozwiązanie dla wszystkich systemów operayjnych:
// ONLINE-RUNNER:browser;
var text = '1\r\n2\r\n3';
var lines = text.split(/\r\n|\n\r|\n|\r/); // \r\n , \n\r , \n or \r
console.log(lines);
Poniżej przedstawiono opis problemu i przykłady, aby zobaczyć, jak to działa w praktyce.
1. Omówienie problemu
Różne systemy operacyjne mają różne nowe symbole linii.
Istnieje kilka najczęściej używanych nowych separacji wierszy:
\n | Multics, Unix i systemy Unixowe (Linux, macOS, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, i inne. |
\r\n | Atari TOS, Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, OS/2, Symbian OS, Palm OS, Amstrad CPC, i większość innych wczesnych systemów operacyjnych innych niż Unix i IBM. |
\r | Maszyny 8-bitowe Commodore (C64, C128), Acorn BBC, ZX Spectrum, TRS-80, seria Apple II, Oberon, klasyczny Mac OS , MIT Lisp Machine i OS-9 |
\n\r | buforowane wyjście tekstowe Acorn BBC i RISC OS |
Źródło: https://en.wikipedia.org/wiki/Newline
2. Uniwersalny przykład podziału nowych linii
To podejście działa we wszystkich systemach operacyjnych. Prezentowany przykład pokazuje operację rozdzielania na oddzielne wiersze na tekście mieszanym.
// ONLINE-RUNNER:browser;
var LINE_EXPRESSION = /\r\n|\n\r|\n|\r/g; // ważna jest kolejność symboli w wyrażeniu
var text = 'line 1\n' +
'line 2\r' +
'line 3\r\n' +
'line 4\n\r' +
'line 5';
var lines = text.split(LINE_EXPRESSION);
console.log(lines);
Uwaga: kolejność symboli w wyrażeniu jest bardzo ważna, aby zapobiec rozbijaniu się na nowe symbole linii, takie jak
\r\n
lub\n\r
.załóżmy, że mamy odpowiedź protokołu HTTP:
HTTP/1.1 200 OK\r\nContent-Length: 25\r\nContent-Type: text/html\r\n\r\nHello world!\nJakiś tekst...
dla
\n
lub\r
na początku zmiennejLINE_EXPRESSION
mogliśmy uzyskać inną liczbę nowych linii po podziale.
3. Microsoft Windows new lines splitting example
// ONLINE-RUNNER:browser;
var text = 'line 1\r\n' +
'line 2\r\n' +
'line 3\r\n' +
'line 4\r\n' +
'line 5';
var lines = text.split('\r\n');
console.log(lines);
Systemy: Atari TOS, Microsoft Windows , DOS ( MS-DOS , PC DOS itp.), DEC TOPS-10, RT-11, CP / M, MP / M, OS / 2, Symbian OS, Palm OS, Amstrad CPC i większość innych wczesnych systemów operacyjnych innych niż Unix i firm innych niż IBM.
4. Przykład podziału nowych linii w systemach Unix / Linux
// ONLINE-RUNNER:browser;
var text = 'line 1\n' +
'line 2\n' +
'line 3\n' +
'line 4\n' +
'line 5';
var lines = text.split('\n');
console.log(lines);
Systemy: systemy Multics, Unix i uniksopodobne ( Linux , macOS , FreeBSD , AIX, Xenix itp.), BeOS, Amiga, RISC OS i inne.
5. Klasyczny przykład podziału nowych linii w systemie Mac OS / OS-9
// ONLINE-RUNNER:browser;
var text = 'line 1\r' +
'line 2\r' +
'line 3\r' +
'line 4\r' +
'line 5';
var lines = text.split('\r');
console.log(lines);
Systemy: 8-bitowe maszyny Commodore (C64, C128), Acorn BBC, ZX Spectrum, TRS-80, seria Apple II, Oberon, klasyczny Mac OS , MIT Lisp Machine i OS-9.