Saya memiliki teks di textarea dan saya membacanya menggunakan atribut .value.
Sekarang saya ingin menghapus semua linebreak (karakter yang dihasilkan saat Anda menekan Enter) dari teks saya sekarang menggunakan .replace dengan ekspresi reguler, tetapi bagaimana cara menunjukkan linebreak dalam regex?
Jika itu tidak mungkin, apakah ada cara lain?
javascript
regex
string
Wingblade
sumber
sumber
Jawaban:
Ini mungkin sebuah FAQ. Bagaimanapun, jeda baris (lebih baik: baris baru) dapat menjadi salah satu dari Carriage Return (CR,
\r
pada Mac yang lebih lama), Line Feed (LF\n
,, pada Unices termasuk Linux) atau CR diikuti oleh LF (\r\n
, pada WinDOS). (Bertentangan dengan jawaban lain, ini tidak ada hubungannya dengan pengkodean karakter.)Oleh karena itu,
RegExp
literal paling efisien untuk mencocokkan semua varian adalahJika Anda ingin mencocokkan semua baris baru dalam sebuah string, gunakan pencocokan global,
masing-masing. Kemudian lanjutkan dengan
replace
metode seperti yang disarankan dalam beberapa jawaban lain. (Mungkin Anda tidak ingin menghapus baris baru, tetapi menggantinya dengan spasi putih lainnya, misalnya karakter spasi, sehingga kata-kata tetap utuh.)sumber
\u000a
atau\n
, yang merupakan umpan baris;\u000d
atau\r
, yang merupakan carriage return;\u2028
, pemisah garis; dan\u2029
, pemisah paragraf. Namun dalam praktiknya, kebanyakan regex yang Anda poskan cukup..value
secara dinamis, misalnyatextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
. Tapi ini mungkin merupakan kasus tepi - seperti yang saya katakan, dalam banyak kasus regex Anda cukup.Cara Anda menemukan jeda baris bervariasi di antara penyandian sistem operasi. Windows akan menjadi
\r\n
, tetapi Linux hanya menggunakan\n
dan Apple menggunakan\r
.Saya menemukan ini di jeda baris JavaScript :
Itu harus menghapus semua jenis jeda baris.
sumber
\r\n
dan\n
dan\r
lebih baik dari sekadar/[\n\r]/g
? Tentunya ini lebih lambat dari yang seharusnya, karena hanya perlu memeriksa setiap karakter terhadap himpunan dua opsi yang mungkin.String.trim()
menghapus spasi putih dari awal dan akhir string ... termasuk baris baru.Berikut ini contoh biola: http://jsfiddle.net/BLs8u/
CATATAN! itu hanya memotong awal dan akhir string, bukan jeda baris atau spasi putih di tengah-tengah string.
sumber
Anda dapat menggunakan
\n
regex untuk baris baru, dan\r
untuk pengembalian carriage.Sistem operasi yang berbeda menggunakan ujung jalur yang berbeda, dengan beragam campuran
\n
dan\r
. Regex ini akan menggantikan semuanya.sumber
/\n|\r/g
lebih efisien ditulis/[\n\r]/g
atau bahkan/[\n\r]+/g
. Hindari pergantian kecuali Anda benar-benar membutuhkannya.Jika Anda ingin menghapus semua karakter kontrol, termasuk CR dan LF, Anda dapat menggunakan ini:
Ini akan menghapus semua karakter yang tidak dapat dicetak. Ini semua karakter BUKAN dalam ruang ASCII HEX
0x20-0x7E
. Jangan ragu untuk mengubah kisaran HEX sesuai kebutuhan.sumber
Solusi paling sederhana adalah:
.replace()
dengan/\s+/g
regexp mengubah semua grup karakter spasi-putih menjadi satu spasi di seluruh string, maka kita.trim()
akan menghapus semua yang melebihi spasi putih sebelum dan sesudah teks.Dianggap sebagai karakter spasi putih:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
sumber
str = str.replace(/\s+/g, ' ').trim();
sumber
Untuk menghapus baris baru, gunakan ini:
Kemudian Anda dapat memotong string Anda untuk menghapus spasi awal dan akhir:
sumber
Jawaban yang diberikan oleh PointedEars adalah segalanya yang sebagian besar dari kita butuhkan. Tetapi dengan mengikuti jawaban Mathias Bynens, saya melakukan perjalanan Wikipedia dan menemukan ini: https://en.wikipedia.org/wiki/Newline .
Berikut ini adalah fungsi drop-in yang mengimplementasikan semua yang halaman Wiki di atas menganggap "baris baru" pada saat jawaban ini.
Jika sesuatu tidak sesuai dengan kasus Anda, hapus saja. Juga, jika Anda mencari kinerja, ini mungkin bukan itu, tetapi untuk alat cepat yang melakukan pekerjaan dalam hal apa pun, ini harus bermanfaat.
sumber
\R
yang merupakan "semua" linefeeds. Kedua - mengapa tidak sederhanasomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
untuklineTerminators
yang ada di string karena alasan kinerja.Linebreak di regex adalah \ n, jadi skrip Anda adalah
sumber
Saya menambahkan jawaban saya, itu hanya tambahan di atas, karena bagi saya saya mencoba semua opsi / n dan tidak berfungsi, saya melihat teks saya datang dari server dengan double slash jadi saya menggunakan ini:
sumber
GUNAKAN FUNGSI INI DI BAWAH DAN MEMBUAT HIDUP ANDA MUDAH
Pendekatan termudah adalah menggunakan ekspresi reguler untuk mendeteksi dan mengganti baris baru dalam string. Dalam hal ini, kami menggunakan fungsi ganti bersama dengan string untuk menggantikan dengan, yang dalam kasus kami adalah string kosong.
Dalam ungkapan di atas, g dan m adalah untuk bendera global dan multiline
sumber
Coba kode berikut. Ini bekerja di semua platform.
sumber
Di mac, cukup gunakan
\n
di regexp untuk mencocokkan linebreak. Jadi kodenya adalahstring.replace(/\n/g, '')
, ps: g yang diikuti berarti cocokkan semua, bukan hanya yang pertama.Di windows, itu akan menjadi
\r\n
.sumber