web-dev-qa-db-fra.com

Comment puis-je supprimer un caractère d'une chaîne en utilisant Javascript?

Je suis si près de l'obtenir, mais ce n'est pas juste. Tout ce que je voudrais faire est de supprimer le caractère "r" d'une chaîne. Le problème est qu'il y a plus d'une instance de "r" dans la chaîne . Cependant, c'est toujours le caractère à l'index 4 (donc le cinquième caractère).

chaîne d'exemple: "crt/r2002_2" Ce que je veux: "crt/2002_2"

Cette fonction de remplacement supprime les deux "r"

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

Produit: "ct/2002_2"

J'ai essayé cette fonction:

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

Cela ne fonctionne que si je le remplace par un autre personnage. Il ne sera pas simplement l'enlever.

Des pensées?

260
user1293504
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

remplacera /r par / en utilisant String.prototype.replace .

Vous pouvez également utiliser regex avec un drapeau global (comme suggéré par Erik Reppen & Sagar Gala , ci-dessous) pour remplacer toutes les occurrences par

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

Il y a toujours les fonctions de chaîne, si vous savez que vous allez toujours supprimer le quatrième caractère:

str.slice(0, 4) + str.slice(5, str.length))
46
simpleigh

Votre première fonction est presque juste. Supprimez simplement le drapeau "g" qui signifie "global" (édition) et donnez-lui un contexte pour repérer le second "r".

Edit: n'a pas vu que c'était le deuxième 'r' avant d'ajouter le '/'. Besoin de \/pour échapper au '/' lors de l'utilisation d'un argument regEx. Merci pour les votes positifs, mais je me suis trompé, je vais donc corriger et ajouter plus de détails pour les personnes intéressées à mieux comprendre les bases de regEx, mais cela fonctionnerait:

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

Maintenant pour l'explication excessive:

Lors de la lecture/écriture d’un motif regEx, pensez en termes de: <a caractère ou jeu de caractères> suivi de <a caractère ou jeu de caractères> suivi de <...

Dans regEx, un <a caractère ou un ensemble de caractères> peut être un par un:

/each char in this pattern/

Alors lisez comme e, suivi de a, suivi de c, etc ...

Ou un seul caractère ou un seul groupe de caractères peuvent être décrits par une classe de caractères:

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

Ou élargi pour correspondre à une quantité de caractères (mais il est toujours préférable de considérer comme un seul élément en termes de modèle séquentiel):

/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)

So smoosh un tas ensemble:

   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"]

Et bien sûr, j'ai trop élaboré, mais je voulais simplement dire ceci:

/cat/

est une série de 3 éléments de motif (une chose suivie d'une chose suivie d'une chose).

Et c'est la même chose:

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

Dès que RegEx commence à paraître farfelu, tout se décompose en une série d'éléments (potentiellement multi-caractères) qui se succèdent de manière séquentielle. C'est un point fondamental, mais qui m'a pris un certain temps à passer, alors je suis allé trop loin en l'expliquant ici, car je pense que c'est un point qui aiderait l'OP et les autres nouveaux venus dans regEx à comprendre ce qui se passe. La clé pour lire/écrire regEx est de le décomposer en ces morceaux.

24
Erik Reppen

Pour le remplacement global de '/ r', ce code a fonctionné pour moi.

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

Il suffit de réparer votre replaceAt:

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

mystring.replaceAt(4, 1);

Je l'appellerais plutôt removeAt. :)

4
Ken White
return this.substr(0, index) + char + this.substr(index + char.length);

char.length est zéro. Dans ce cas, vous devez ajouter 1 pour pouvoir ignorer un caractère.

4
Eugene Retunsky

Si c'est toujours le 4ème caractère de yourString, vous pouvez essayer: 

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

Cela ne fonctionne que si je le remplace par un autre personnage. Il ne sera pas simplement l'enlever.

En effet, lorsque char est égal à "", char.length est égal à 0, si bien que vos sous-chaînes se combinent pour former la chaîne d'origine. Aller avec votre tentative de code, ce qui suit fonctionnera:

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 ^
}
2
paislee

Le moyen le plus court serait d’utiliser une épissure

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);
1
Gabrielus

Créer une fonction comme ci-dessous 

  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);
    }
    }

Pour remplacer, donnez le caractère comme ci-dessous

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

 enter image description here

et supprimer le caractère à l'index donne le deuxième paramètre sous forme de chaîne vide

a.replaceAt (4, '');

 enter image description here

1
Rajiv

Si vous voulez seulement supprimer un seul caractère et si vous connaissez l'index d'un caractère que vous souhaitez supprimer, vous pouvez utiliser la fonction suivante:

/**
 * 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) {
    return str.substring(0, index - 1) + str.substring(index, str.length)
}
0
dd619

La fonction suivante a fonctionné le mieux pour mon cas:

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

Je n'aime pas utiliser la fonction replace pour supprimer des caractères de la chaîne. Ce n'est pas logique le faire comme ça. En général, je programme en C # (Sharp), et chaque fois que je veux supprimer des caractères de chaîne, j'utilise la méthode Remove de la classe String, mais pas de méthode Replace, même si elle existe, car lorsque je suis sur le point de supprimer, je supprime, pas remplacer. _ {C'est logique!} _

En Javascript, il n'y a pas de fonction remove pour string, mais il y a une fonction substr. Vous pouvez utiliser la fonction sous-substrat une ou deux fois pour supprimer des caractères de chaîne. Vous pouvez faire en sorte que la fonction suivante supprime les caractères au début de l'index jusqu'à la fin de la chaîne, tout comme la méthode c # commence par surcharger String.Remove (int startIndex):

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

et/ou vous pouvez également créer la fonction suivante pour supprimer les caractères au début de l'index et du nombre, tout comme pour la seconde méthode de surcharge c #: String.Remove (int startIndex, int count):

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

et ensuite vous pouvez utiliser ces deux fonctions ou l’une d’elles à vos besoins!

Exemple:

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

Sortie: crt/2002_2

Atteindre des objectifs en utilisant des techniques avec sans logique pourrait causer des confusions dans la compréhension du code et des erreurs futures, si vous le faites souvent dans un grand projet!

Ceci est une amélioration de réponse simpleigh (omettre la longueur)

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));

0
Kamil Kiełczewski

En C # (Sharp), vous pouvez créer un caractère vide sous la forme '\ 0' . Peut-être pouvez-vous faire ceci:

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

Recherchez sur Google ou naviguez sur Internet et vérifiez si le javascript vous permet de créer des caractères vides, comme le fait C #. Si oui, apprenez comment le faire et peut-être que la fonction replaceAt fonctionnera enfin, et vous obtiendrez ce que vous voulez!

Enfin, ce caractère "r" sera supprimé!