Saya sangat dekat untuk mendapatkan ini, tetapi itu tidak benar. Yang ingin saya lakukan adalah menghapus karakter r
dari string. Masalahnya adalah, ada lebih dari satu instance dari r
dalam string. Namun, selalu karakter di indeks 4 (jadi karakter ke-5).
contoh string: crt/r2002_2
Apa yang saya inginkan: crt/2002_2
Fungsi ganti ini menghapus keduanya r
mystring.replace(/r/g, '')
Menghasilkan: ct/2002_2
Saya mencoba fungsi ini:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')
Ini hanya berfungsi jika saya menggantinya dengan karakter lain. Itu tidak hanya akan menghapusnya.
Adakah pikiran?
javascript
string
replace
character
pengguna1293504
sumber
sumber
Jawaban:
akan diganti
/r
dengan/
menggunakanString.prototype.replace
.Atau Anda bisa menggunakan regex dengan bendera global (seperti yang disarankan oleh Erik Reppen & Sagar Gala , di bawah) untuk mengganti semua kemunculan dengan
EDIT: Karena semua orang bersenang-senang di sini dan user1293504 tampaknya tidak akan kembali dalam waktu dekat untuk menjawab pertanyaan klarifikasi, berikut adalah metode untuk menghapus karakter ke-N dari string:
Karena user1293504 menggunakan penghitungan normal alih-alih penghitungan indeks-nol, kami harus menghapus 1 dari indeks, jika Anda ingin menggunakan ini untuk mereplikasi cara
charAt
kerja jangan kurangi 1 dari indeks pada baris ke-3 dan gunakantmp.splice(i, 1)
sebagai gantinya.sumber
"/"
Cara javascript fungsional sederhana akan
mystring = mystring.split('/r').join('/')
sederhana, cepat, ini menggantikan secara global dan tidak perlu fungsi atau prototipe
sumber
'/'
Selalu ada fungsi string, jika Anda tahu Anda akan selalu menghapus karakter keempat:
sumber
str.slice(0, 0) + str.slice(1, str.length)
menghapus yang pertama danstr.slice(0, str.length-1) + str.slice(str.length, str.length)
menghapus yang terakhir. (Tentu saja Anda akan menghapus bagian-bagian yang berlebihan jika Anda tahu Anda selalu menghapus bagian pertama atau terakhir, tetapi jika mereka variabel mereka bekerja sama baiknya dengan indeks lainnya.)Fungsi pertama Anda hampir benar. Hapus saja 'g' flag yang merupakan singkatan dari 'global' (edit) dan berikan beberapa konteks untuk melihat 'r' kedua.
Sunting: tidak melihat itu adalah 'r' kedua sebelum menambahkan '/'. Perlu \ / untuk keluar dari '/' saat menggunakan regEx arg. Terima kasih atas upvotes tapi saya salah jadi saya akan memperbaiki dan menambahkan lebih banyak detail untuk orang yang tertarik memahami dasar-dasar regEx lebih baik tetapi ini akan berhasil:
Sekarang untuk penjelasan yang berlebihan:
Saat membaca / menulis pola regEx pikirkan dalam hal: <a character or set of charcters> diikuti oleh <a character atau set charcters> diikuti oleh <...
Dalam karakter regEx <a atau kumpulan karakter> bisa satu per satu:
Jadi baca sebagai e, diikuti oleh, diikuti oleh c, dll ...
Atau satu karakter <a atau serangkaian karakter> dapat berupa karakter yang dijelaskan oleh kelas karakter:
Atau diperluas untuk mencocokkan jumlah karakter (tetapi masih dianggap sebagai elemen tunggal dalam hal pola sekuensial):
Jadi smoosh a bunch bersama:
Dan tentu saja saya sudah terlalu panjang lebar tetapi maksud saya adalah bahwa ini:
adalah serangkaian 3 elemen pola (sesuatu diikuti oleh sesuatu diikuti oleh sesuatu).
Demikian juga ini:
Meskipun regEx mulai terlihat aneh, semuanya terurai menjadi serangkaian hal (hal-hal yang berpotensi multi-karakter) mengikuti satu sama lain secara berurutan. Agak titik dasar tetapi satu yang perlu saya beberapa saat untuk melewati jadi saya sudah berlebihan menjelaskannya di sini karena saya pikir itu salah satu yang akan membantu OP dan orang lain yang baru untuk regEx memahami apa yang terjadi. Kunci untuk membaca / menulis regEx adalah memecahnya menjadi beberapa bagian.
sumber
Untuk penggantian global '/ r', kode ini berfungsi untuk saya.
sumber
Perbaiki Anda
replaceAt
:Saya akan menyebutnya sebagai
removeAt
gantinya. :)sumber
char.length
adalah nol. Anda harus menambahkan1
dalam hal ini untuk melewati karakter.sumber
replaceAt
tidak berfungsi. Itu harus berupa komentar terhadap pertanyaan awal alih-alih jawaban. :)Any thoughts?
,.Jika selalu karakter ke-4 di String Anda, Anda dapat mencoba:
sumber
Ini karena ketika
char
sama dengan""
,char.length
adalah 0, maka substring Anda bergabung untuk membentuk string asli. Mengikuti upaya kode Anda, yang berikut ini akan berfungsi:sumber
Buat fungsi seperti di bawah ini
Untuk mengganti beri karakter seperti di bawah ini
dan untuk menghapus karakter pada indeks tertentu, berikan parameter kedua sebagai string kosong
sumber
Jika Anda hanya ingin menghapus satu karakter dan Jika Anda tahu indeks karakter yang ingin Anda hapus, Anda dapat menggunakan fungsi berikut:
sumber
Saya tidak suka menggunakan fungsi ganti untuk menghapus karakter dari string. Ini tidak logis untuk melakukannya seperti itu. Biasanya saya memprogram dalam C # (Sharp), dan setiap kali saya ingin menghapus karakter dari string, saya menggunakan metode Hapus dari kelas String, tetapi tidak ada metode Ganti, meskipun ada, karena ketika saya akan menghapus, saya menghapus, tidak ada ganti. Ini logis!
Dalam Javascript, tidak ada fungsi hapus untuk string, tetapi ada fungsi substr. Anda dapat menggunakan fungsi substr satu atau dua kali untuk menghapus karakter dari string. Anda dapat membuat fungsi berikut untuk menghapus karakter pada indeks awal hingga akhir string, seperti metode c # yang pertama kali membebani String.Remove (int startIndex):
dan / atau Anda juga dapat membuat fungsi berikut untuk menghapus karakter pada indeks awal dan menghitung, seperti metode c # yang membebani String.Remove (int startIndex, int count):
dan kemudian Anda dapat menggunakan dua fungsi ini atau salah satunya untuk kebutuhan Anda!
Contoh:
Output: crt / 2002_2
Mencapai tujuan dengan melakukan teknik tanpa logika dapat menyebabkan kebingungan dalam memahami kode, dan kesalahan di masa depan, jika Anda sering melakukan ini dalam proyek besar!
sumber
String.prototype.replace
, yang merupakan bagian dari API dasar. Selain itu, memahami penghapusan sebagai kasus penggantian khusus cukup logis sejauh pemrograman berjalan. Anda seharusnya tidak mencoba membuat API Anda terdiri dari semua kata dalam kamus bahasa Inggris, Anda harus mencoba mengurangi API Anda menjadi basis ortogonal minimalnya.Fungsi berikut berfungsi paling baik untuk kasus saya:
sumber
Cara terpendek adalah menggunakan sambungan
sumber
c
dan"
)Anda bisa menggunakan ini:
if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
Penjelasan:
if ( str[4] === 'r' )
Periksa apakah karakter ke-5 adalah a
'r'
str.slice(0, 4)
Iris string untuk mendapatkan semuanya sebelum
'r'
+ str.slice(5)
Tambahkan sisa string.
Diminimalkan:
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37 byte!]DEMO:
sumber
sumber
Ini adalah peningkatan dari jawaban sederhana sederhana (tanpa panjang)
Tampilkan cuplikan kode
sumber
Di C # (Sharp), Anda dapat membuat karakter kosong sebagai '\ 0'. Mungkin Anda bisa melakukan ini:
Cari di google atau jelajahi di interent dan periksa apakah javascript memungkinkan Anda membuat karakter kosong, seperti C #. Jika ya, maka pelajari cara melakukannya, dan mungkin fungsi replaceAt akan bekerja pada akhirnya, dan Anda akan mencapai apa yang Anda inginkan!
Akhirnya karakter 'r' akan dihapus!
sumber