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

je suis si proche 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, il n'y a plus d'une instance de "r" dans la chaîne. Cependant, il est toujours le 4ème personnage.

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

cette fonction de remplacement supprime à la fois" 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 caractère. Elle ne se contentera pas de l'enlever.

une idée?

232
demandé sur Liam 2012-03-30 00:24:42

13 réponses

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

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

vous pouvez aussi utiliser regex avec un drapeau mondial (comme suggéré par Erik Reppen & Sagar Gala , ci-dessous) pour remplacer tous les événements par

mystring = mystring.replace(/\/r/g, '/');
330
répondu JKirchartz 2018-07-10 15:37:51

une manière javascript fonctionnelle simple serait

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

simple, rapide, il remplace globalement et pas besoin de fonctions ou de prototypes

42
répondu Strife86 2014-10-29 15:30:06

il y a toujours les fonctions string, si vous savez que vous allez toujours supprimer le quatrième caractère:

str.slice(0, 4) + str.slice(5, str.length))
42
répondu simpleigh 2016-07-24 14:12:24

votre première func est presque à droite. Il suffit de supprimer le drapeau 'g' qui signifie 'global' (edit) et de lui donner un contexte pour repérer le second 'r'.

Edit: ne pas voir que c'était la deuxième " r " avant donc ajouté le '/'. Besoins \/ pour échapper à la '/' lors de l'utilisation d'une expression régulière arg. Merci pour les upvotes mais je me suis trompé donc je vais corriger et ajouter plus de détails pour les personnes intéressées à comprendre les bases de regEx mieux, mais cela fonctionnerait:

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

maintenant pour l'explication excessive:

lors de la lecture/écriture d'un motif regEx, pensez en termes de: suivi de suivi de <...

En regEx pourriez être l'un en même temps:

/each char in this pattern/

ainsi, lire e, suivi de a, suivi de c, etc...

Ou un pourrait être des caractères 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 développé pour correspondre à une quantité de personnages (mais toujours mieux de penser comme un élément unique 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)

Donc 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 mon point était simplement que ceci:

/cat/

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

Et alors, est-ce:

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

aussi farfelu que regEx commence à paraître, tout se décompose en une série de choses (potentiellement des choses à plusieurs caractères) qui se suivent l'une l'autre séquentiellement. C'est un point un peu basique, mais qui m'a pris du temps à passer, donc j'ai exagéré en l'expliquant ici, car je pense que c'est un point qui aiderait L'OP et d'autres nouveaux à regEx à comprendre ce qui se passe. La clé de la lecture/écriture des regEx est de le décomposer en ces pièces.

22
répondu Erik Reppen 2017-01-29 13:36:02

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

mystring = mystring.replace(/\/r/g,'');
7
répondu Sagar Gala 2013-09-12 23:52:53

il suffit de fixer votre replaceAt :

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

mystring.replaceAt(4, 1);

Je l'appellerais removeAt à la place. :)

4
répondu Ken White 2012-03-29 20:36:27
return this.substr(0, index) + char + this.substr(index + char.length);

char.length est zéro. Vous devez ajouter 1 dans ce cas afin de sauter le caractère.

3
répondu Eugene Retunsky 2016-07-24 14:10:10

cela ne fonctionne que si je le remplace par un autre caractère. Elle ne se contentera pas de l'enlever.

c'est parce que quand char est égal à "" , char.length est 0, donc vos substrats se combinent pour former la chaîne originale. En allant 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
répondu paislee 2012-03-29 20:46:48

si c'est toujours le 4ème char dans votre corde vous pouvez essayer:

yourString.replace(/^(.{4})(r)/, function(, ) { return ; });
1
répondu Just_Mad 2012-03-29 20:34:13

Je n'aime pas utiliser la fonction replace pour supprimer les caractères de la chaîne. Ce n'est pas logique de le faire comme ça. Habituellement Je programme en C# (Sharp), et chaque fois que je veux supprimer des caractères de la chaîne, j'utilise la méthode Supprimer de la classe String, mais pas de remplacer la méthode, même si elle existe, parce que quand je suis sur le point de supprimer, je supprime, pas de remplacer. c'est logique!

en Javascript, il n'y a pas de fonction Supprimer pour la chaîne, mais il est fonction substr. Vous pouvez utiliser la fonction substr une ou deux fois pour supprimer des caractères de la chaîne. Vous pouvez faire la fonction suivante pour supprimer les caractères au début de l'index à la fin de la chaîne, tout comme la première chaîne de surcharge de la méthode c#.Supprimer (int startIndex):

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

et/ou vous pouvez également faire la fonction suivante pour supprimer les caractères à l'index de début et compter, tout comme la deuxième chaîne de surcharge de la méthode c#.Supprimer (int startIndex, int le comte):

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

et alors vous pouvez utiliser ces deux fonctions ou l'une d'elles pour vos besoins!

exemple:

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

sortie: crt / 2002_2

atteindre des objectifs en faisant des techniques avec aucune logique pourrait causer des confusions dans la compréhension du code, et des erreurs futures, si vous faites cela beaucoup dans un grand projet!

0
répondu Farewell Stack Exchange 2014-04-20 15:19:57

dans C# (Sharp), vous pouvez faire un caractère vide comme '\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, '"151900920"')

recherchez sur google ou surfez sur l'interent et vérifiez si javascript vous permet de créer des caractères vides, comme C# le fait. Si oui, alors apprenez comment le faire, et peut-être la fonction de remplacement fonctionnera-t-elle enfin, et vous obtiendrez ce que vous voulez!

enfin ce caractère' r ' sera supprimé!

0
répondu Farewell Stack Exchange 2014-04-21 12:57:21

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
répondu TekTimmy 2018-03-15 09:41:49

la voie la plus courte serait d'utiliser splice

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);
0
répondu Gabrielus 2018-08-26 21:49:58