Saya ingin mengonversi string berikut ke output yang disediakan.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Aku sudah tidak menemukan solusi yang akan menangani karakter khusus seperti \r
, \n
, \b
, dll
Pada dasarnya saya hanya ingin menyingkirkan apa saja yang tidak alfanumerik. Inilah yang saya coba ...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
Satu lagi upaya dengan beberapa langkah
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
dengan hasil
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Bantuan apa pun akan dihargai.
Solusi kerja:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
javascript
regex
Bobby Cannon
sumber
sumber
var Input = "\\test\red\bob\fred\new"
string ini tidak mengandung "merah" sehingga upaya pertama Anda benar, apakah Anda menguji terhadap litteral"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
coba ini.Jawaban:
Menghapus karakter non-alfanumerik
Berikut ini adalah / regex yang benar untuk menghapus karakter non-alfanumerik dari string input:
Perhatikan bahwa
\W
itu setara dengan[^0-9a-zA-Z_]
- itu termasuk karakter garis bawah. Untuk juga menghapus garis bawah, gunakan misalnya:Input salah
Karena string uji berisi berbagai karakter yang lolos, yang bukan merupakan alfanumerik, itu akan menghapusnya.
Garis miring terbalik di dalam string harus keluar jika harus dipahami secara harfiah:
Menangani string yang cacat
Jika Anda tidak dapat keluar dari string input dengan benar (mengapa tidak?), Atau itu berasal dari beberapa sumber yang tidak terpercaya / salah konfigurasi - Anda dapat melakukan sesuatu seperti ini:
Perhatikan bahwa representasi json dari sebuah string menyertakan tanda kutip:
Tetapi mereka juga dihapus oleh regex pengganti.
sumber
\W
dengan[_\W]
(yang digunakan dalam pertanyaan) atau yang serupa akan menghapus garis bawah.Semua jawaban saat ini masih memiliki keanehan, hal terbaik yang bisa saya dapatkan adalah:
Inilah contoh yang menangkap setiap tombol yang dapat saya temukan di keyboard:
Output: '123abcABC'
sumber
input.replace(/\W/g, '')
daun di_
dalam sebuah String. @ Deminetix benarstring.replace(/[^A-Za-z0-9]/g, '');
berfungsi lebih baik karena menghapus semua karakter non-alfanumerik dari String.Masalahnya bukan dengan bagaimana Anda mengganti karakter, masalahnya adalah bagaimana Anda memasukkan string.
Ini hanya backslash pertama di masukan yang adalah karakter backslash, yang lain adalah bagian dari karakter kontrol
\r
,\b
,\f
dan\n
.Karena garis miring terbalik itu bukan karakter yang terpisah, tetapi bagian dari notasi untuk menulis karakter kontrol tunggal, mereka tidak dapat dihapus secara terpisah. Yaitu Anda tidak dapat menghapus garis miring terbalik
\n
karena bukan dua karakter yang terpisah, itu adalah cara Anda menulis karakter kontrolLF
, atau umpan baris .Jika Anda benar-benar ingin mengubah input itu menjadi output yang diinginkan, Anda perlu mengganti setiap karakter kontrol dengan huruf yang sesuai, misalnya mengganti karakter
\n
dengan karaktern
.Untuk mengganti karakter kontrol, Anda perlu menggunakan set karakter seperti
[\r]
, karena\r
memiliki makna khusus dalam ekspresi reguler:Demo: http://jsfiddle.net/SAp4W/
sumber
Anda dapat mencoba regex ini:
sumber
Ini menghapus semua karakter non-alfanumerik, mempertahankan penggunaan huruf besar, dan menjaga jarak antar kata.
sumber
Ini adalah contoh yang bisa Anda gunakan,
sumber
Jika Anda ingin memiliki
\\test\red\bob\fred\new
string ini , Anda harus menghindari semua garis miring terbalik (\
). Ketika Anda menulis\\test\\red\\bob\\fred\\new
string Anda sebenarnya mengandung garis miring terbalik tunggal. Anda dapat yakin akan hal ini mencetak string Anda.Jadi jika garis miring terbalik di string Anda lolos
myString.replace(/\W/g,'')
akan bekerja secara normal.sumber