Bagaimana saya bisa menghapus karakter dari sebuah string menggunakan Javascript?

Aku begitu dekat untuk mendapatkan ini, tapi itu hanya isn't kanan. Semua saya ingin lakukan adalah menghapus karakter r dari sebuah string. Masalahnya adalah, ada lebih dari satu contoh dari r dalam string. Namun, itu selalu karakter pada indeks 4 (sehingga 5 karakter).

contoh string: crt/r2002_2

Apa yang saya inginkan: crt/2002_2

Ini menggantikan fungsi menghilangkan kedua 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 bekerja jika saya menggantinya dengan yang lain karakter. Itu tidak akan cukup keluarkan.

Setiap pikiran?

Mengomentari pertanyaan (1)
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

akan menggantikan /r dengan / menggunakan String.prototype.replace.

Sebagai alternatif, anda bisa menggunakan regex dengan bendera global (seperti yang disarankan oleh Erik Reppen & Sagar Gala, di bawah) untuk mengganti semua kejadian dengan

mystring = mystring.replace(/\/r/g, '/');

EDIT: Karena setiap orang's memiliki begitu banyak bersenang-senang di sini dan user1293504 doesn't tampaknya akan datang kembali dalam waktu dekat untuk menjawab pertanyaan klarifikasi, di sini's metode untuk menghapus N karakter dari string:

String.prototype.removeCharAt = function (i) {
    var tmp = this.split(''); // convert to an array
    tmp.splice(i - 1 , 1); // remove 1 element from the array (adjusting for non-zero-indexed counts)
    return tmp.join(''); // reconstruct the string
}

console.log("crt/r2002_2".removeCharAt(4));

Sejak user1293504 digunakan hitungan normal bukan-nol menghitung, we've harus menghapus 1 dari indeks, jika anda ingin menggunakan ini untuk meniru cara charAt bekerja jangan kurangi 1 dari indeks pada 3 baris dan menggunakan tmp.sambatan(i, 1) sebagai gantinya.

Komentar (1)

Sederhana dan fungsional javascript cara

mystring = mystring.split('/r').bergabung('/')

sederhana, cepat, mengganti secara global dan tidak perlu untuk fungsi-fungsi atau prototipe

Komentar (6)

Ada's selalu fungsi string, jika anda tahu anda're selalu akan menghapus karakter keempat:

str.slice(0, 4) + str.slice(5, str.length))
Komentar (2)

Pertama anda func hampir tepat. Hanya menghapus 'g' bendera yang merupakan singkatan dari 'global' (edit) dan memberikan beberapa konteks untuk tempat kedua 'r'.

Edit: didn't melihat itu kedua 'r' sebelum jadi tambah '/'. Kebutuhan \/ untuk melarikan diri '/' bila menggunakan regEx arg. Terima kasih untuk upvotes tapi aku salah jadi saya'll memperbaiki dan menambahkan lebih detail untuk orang yang tertarik dalam memahami dasar-dasar regEx lebih baik tapi ini akan bekerja:

mystring.replace(/\/r/, '/')

Sekarang bagi anda yang berlebihan penjelasan:

Ketika membaca/menulis regEx pola pikir dalam hal: <a karakter atau set patung pun> diikuti oleh <a karakter atau set patung pun> diikuti oleh <...

Di regEx <a karakter atau set patung pun> bisa satu per satu:

/each char in this pattern/

Sehingga dibaca sebagai e, diikuti oleh, yang diikuti oleh c, dll...

Atau satu <a karakter atau set patung pun> bisa menjadi karakter yang digambarkan oleh kelas karakter:

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

Atau diperluas untuk mencocokkan jumlah karakter (tapi masih berpikir sebagai elemen tunggal dalam hal pola berurutan):

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

Jadi smoosh sekelompok bersama-sama:

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

Dan tentu saja aku've atas diuraikan tapi poin saya adalah bahwa ini:

/cat/

merupakan rangkaian dari 3 pola unsur-unsur (hal diikuti oleh hal yang diikuti oleh hal).

Dan jadi ini:

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

Sebagai aneh seperti regEx mulai terlihat, itu semua rusak serangkaian hal-hal yang (berpotensi multi-karakter hal-hal) berikut satu sama lain secara berurutan. Jenis titik dasar tapi satu yang aku butuh waktu beberapa saat untuk mendapatkan masa lalu jadi saya've pergi ke laut menjelaskan hal itu di sini karena saya pikir itu's salah satu yang akan membantu OP dan lain-lain baru untuk regEx memahami apa's terjadi. Kunci untuk membaca/menulis regEx adalah memecahnya menjadi potongan-potongan.

Komentar (0)

Untuk penggantian global dari '/r', kode ini bekerja untuk saya.

mystring = mystring.replace(/\/r/g,'');
Komentar (0)

Hanya memperbaiki replaceAt:

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

I'd menyebutnya removeAt sebagai gantinya. :)

Komentar (1)
return this.substr(0, index) + char + this.substr(index + char.length);

char.panjang adalah nol. Anda perlu menambahkan 1, dalam hal ini dalam rangka untuk beralih karakter.

Komentar (7)

Ini hanya bekerja jika saya menggantinya dengan yang lain karakter. Itu tidak akan cukup keluarkan.

Hal ini karena ketika char adalah sama dengan ",", char.panjang adalah 0, sehingga anda substring bergabung untuk membentuk string asli. Akan dengan kode anda mencoba, berikut ini akan bekerja:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}
  • [DEMO][1]
Komentar (0)

Membuat fungsi seperti di bawah ini

  String.prototype.replaceAt = function (index, char) {
      if(char=='') {
          return this.slice(0,index)+this.substr(index+1 + char.length);
      } else {
          return this.substr(0, index) + char + this.substr(index + char.length);
      }
  }

Untuk menggantikan memberikan karakter seperti di bawah ini

  var a="12346";
  a.replaceAt(4,'5');

dan untuk menghapus karakter di pasti naik, memberikan parameter kedua sebagai string kosong

a.replaceAt(4,'');

Komentar (0)

Jika hal ini selalu 4 char di yourString yang dapat anda coba:

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });
Komentar (0)

Jika anda hanya ingin menghapus satu karakter dan Jika anda mengetahui indeks dari karakter yang ingin anda hapus, anda dapat menggunakan fungsi berikut:

/**
 * Remove single character at particular index from string
 * @param {*} index index of character you want to remove
 * @param {*} str string from which character should be removed
 */
function removeCharAtIndex(index, str) {
    var maxIndex=index==0?0:index;
    return str.substring(0, maxIndex) + str.substring(index, str.length)
}
Komentar (2)

Saya tidak suka menggunakan menggantikan fungsi untuk menghapus karakter dari string. Ini adalah tidak logis untuk melakukan hal seperti itu. Biasanya saya program di C# (Sharp), dan setiap kali saya ingin menghapus karakter dari string, saya menggunakan metode Hapus String kelas, tapi tidak Mengganti metode, meskipun itu ada, karena ketika saya hendak memindahkan, menghapus, tidak ada ganti. Ini adalah logis!

Dalam Javascript, tidak menghapus fungsi string, tapi ada fungsi substr. Anda dapat menggunakan fungsi substr sekali atau dua kali untuk menghapus karakter dari string. Anda dapat membuat fungsi berikut untuk menghapus karakter di awal indeks akhir string, seperti c# metode pertama overload String.Remove(int startIndex):

function Remove(str, startIndex) {
    return str.substr(0, startIndex);
}

dan/atau anda juga dapat membuat fungsi berikut untuk menghapus karakter di awal indeks dan menghitung, seperti c# metode kedua yang berlebihan String.Remove(int startIndex, int count):

function Remove(str, startIndex, count) {
    return str.substr(0, startIndex) + str.substr(startIndex + count);
}

dan kemudian anda dapat menggunakan dua fungsi atau salah satu dari mereka untuk kebutuhan anda!

Contoh:

alert(Remove("crt/r2002_2", 4, 1));

Output: crt/2002_2

Mencapai tujuan dengan melakukan teknik dengan tidak ada logika mungkin menyebabkan kebingungan dalam memahami kode etik, dan kesalahan di masa depan, jika anda melakukan ini dalam sebuah proyek besar!

Komentar (1)

Berikut fungsi bekerja terbaik untuk kasus saya:

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}
Komentar (0)

Jalan terpendek akan menggunakan sambatan

var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);
Komentar (1)

Anda dapat menggunakan ini: jika ( str[4] === &#39;r&#39; ) str = str.slice(0, 4) + str.slice(5)

Penjelasan:

  1. if ( str[4] === &#39;r&#39; )
    Periksa jika 5 karakter adalah &#39;r&#39;

  2. str.slice(0, 4)
    Iris string untuk mendapatkan segala sesuatu sebelum &#39;r&#39;

  3. + str.slice(5)
    Tambahkan sisa string.

Minified: s=s[4]==&#39;r&#39;?s.slice(0,4)+s.slice(5):s [37 byte!]

DEMO:

function remove5thR (s) {
  s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
  console.log(s); // log output
}

remove5thR('crt/r2002_2')  // > 'crt/2002_2'
remove5thR('crt|r2002_2')  // > 'crt|2002_2'
remove5thR('rrrrr')        // > 'rrrr'
remove5thR('RRRRR')        // > 'RRRRR' (no change)
Komentar (0)

Ini adalah perbaikan dari simpleigh jawaban (hilangkan panjang)

s.slice(0,4)+s.slice(5)
let s="crt/r2002_2";

let o= s.slice(0,4)+s.slice(5);

let delAtIdx= (s,i) => s.slice(0,i)+s.slice(i+1); // this function remove letter at index i

console.log(o);
console.log(delAtIdx(s,4));
Komentar (0)

Di C# (Sharp), anda dapat membuat sebuah karakter kosong sebagai '\0'. Mungkin anda bisa melakukan hal ini:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

Pencarian di google atau berselancar di interent dan memeriksa jika javascript memungkinkan anda untuk membuat karakter kosong, seperti C# tidak. Jika ya, maka pelajari bagaimana untuk melakukannya, dan mungkin replaceAt fungsi akan bekerja pada akhirnya, dan anda'll mencapai apa yang anda inginkan!

Akhirnya yang 'r' karakter yang akan dihapus!

Komentar (0)