Mam tekst w obszarze tekstowym i czytam go za pomocą atrybutu .value.
Teraz chciałbym usunąć wszystkie Enterłamanie wierszy (znak powstający po naciśnięciu ) z mojego tekstu, używając teraz .replace z wyrażeniem regularnym, ale jak wskazać łamanie linii w wyrażeniu regularnym?
Jeśli nie jest to możliwe, czy istnieje inny sposób?
javascript
regex
string
Wingblade
źródło
źródło
Odpowiedzi:
To jest prawdopodobnie FAQ. W każdym razie, podziały linii (lepiej: nowe linie) mogą być jednym z Carriage Return (CR,
\r
na starszych komputerach Mac), Line Feed (LF\n
, na Unices włącznie z Linuksem) lub CR, a następnie LF (\r\n
, na WinDOS). (W przeciwieństwie do innej odpowiedzi, nie ma to nic wspólnego z kodowaniem znaków.)Dlatego najbardziej efektywnym
RegExp
dosłownym pasującym do wszystkich wariantów jestJeśli chcesz dopasować wszystkie znaki nowej linii w ciągu, użyj dopasowania globalnego,
odpowiednio. Następnie postępuj zgodnie z
replace
metodą opisaną w kilku innych odpowiedziach. (Prawdopodobnie nie chcesz usuwać nowych wierszy, ale zamień je na inne białe znaki, na przykład spację, aby słowa pozostały nienaruszone).źródło
\u000a
lub\n
, który jest wierszem;\u000d
lub\r
, który jest zwrotem przewozu;\u2028
, separator linii; i\u2029
separator akapitu. W praktyce opublikowany regex jest jednak w większości przypadków wystarczający..value
dynamicznym ustawianiu obszaru tekstowego , nptextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
. Ale jest to prawdopodobnie przypadek skrajny - jak powiedziałem, w większości przypadków regex jest wystarczający.Sposób podziału linii różni się w zależności od kodowania systemu operacyjnego. Windows byłby
\r\n
, ale Linux po prostu używa,\n
a Apple używa\r
.Znalazłem to w podziale wiersza JavaScript :
To powinno usunąć wszystkie rodzaje podziałów linii.
źródło
\r\n
i\n
i\r
lepiej niż po prostu/[\n\r]/g
? Z pewnością jest to wolniejsze niż powinno być, ponieważ wystarczy sprawdzić każdą postać w zestawie dwóch możliwych opcji.String.trim()
usuwa białe znaki z początku i końca ciągów znaków ... w tym znaków nowej linii.Oto przykładowe skrzypce: http://jsfiddle.net/BLs8u/
UWAGA! przycina tylko początek i koniec łańcucha, nie przerywa linii ani białych znaków na środku łańcucha.
źródło
Możesz użyć
\n
wyrażenia regularnego dla znaków nowej linii i\r
zwrotów karetki.Różne systemy operacyjne używają różnych zakończeń linii, z różnymi kombinacjami
\n
i\r
. Ten regex zastąpi je wszystkie.źródło
/\n|\r/g
jest wydajniej napisany/[\n\r]/g
lub nawet/[\n\r]+/g
. Unikaj zmiany, chyba że jest to absolutnie potrzebne.Jeśli chcesz usunąć wszystkie znaki kontrolne, w tym CR i LF, możesz użyć tego:
Usunie wszystkie niedrukowalne znaki. To są wszystkie znaki NIE w przestrzeni HEX ASCII
0x20-0x7E
. Zmodyfikuj zakres HEX w razie potrzeby.źródło
Najprostszym rozwiązaniem byłoby:
.replace()
z/\s+/g
regexp zmienia wszystkie grupy białych znaków na jedną spację w całym ciągu, a następnie.trim()
usuwamy wszystkie przekraczające białe spacje przed i po tekście.Są uważane za znaki białych znaków:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
źródło
str = str.replace(/\s+/g, ' ').trim();
źródło
Aby usunąć nowe znaki linii, użyj tego:
Następnie możesz przyciąć ciąg, aby usunąć spacje wiodące i końcowe:
źródło
Odpowiedź dostarczona przez PointedEars to wszystko, czego większość z nas potrzebuje. Ale podążając za odpowiedzią Mathiasa Bynensa, pojechałem na Wikipedię i znalazłem to: https://en.wikipedia.org/wiki/Newline .
Poniżej znajduje się funkcja rozwijana, która implementuje wszystko, co powyższa strona Wiki uważa za „nową linię” w momencie tej odpowiedzi.
Jeśli coś nie pasuje do twojej skrzynki, po prostu ją usuń. Ponadto, jeśli szukasz wydajności, może to nie być to, ale w przypadku szybkiego narzędzia, które wykona zadanie w każdym przypadku, powinno to być przydatne.
źródło
\R
czyli „wszystkich” kanałów. Po drugie - dlaczego nie po prostusomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
tego,lineTerminators
który istniał w ciągu ze względu na wydajność.Podziałem wiersza w wyrażeniu regularnym jest \ n, więc skrypt byłby
źródło
Dodaję swoją odpowiedź, jest to tylko dodatek do powyższego, ponieważ dla mnie wypróbowałem wszystkie opcje / n i nie działało, zobaczyłem, że mój tekst pochodzi z serwera z podwójnym ukośnikiem, więc użyłem tego:
źródło
KORZYSTAJ Z PONIŻSZEJ FUNKCJI I UŁATWIAJ SWOJE ŻYCIE
Najłatwiejszym podejściem jest użycie wyrażeń regularnych do wykrywania i zastępowania znaków nowej linii w ciągu. W tym przypadku używamy funkcji replace wraz z ciągiem do zamiany, który w naszym przypadku jest pustym ciągiem.
W powyższym wyrażeniu g i m oznaczają flagi globalne i wielowierszowe
źródło
Wypróbuj następujący kod. Działa na wszystkich platformach.
źródło
Na komputerze Mac wystarczy użyć
\n
wyrażenia regularnego, aby dopasować podziały wierszy. Tak więc kod będziestring.replace(/\n/g, '')
wyglądał następująco: ps: g następujące oznacza, że pasuje do wszystkich zamiast tylko pierwszego.Tak będzie w systemie Windows
\r\n
.źródło