web-dev-qa-db-fra.com

Comment remplacer tous les points d'une chaîne à l'aide de JavaScript

Je veux remplacer toutes les occurrences d'un point (.) dans une chaîne JavaScript

Par exemple, j'ai:

var mystring = 'okay.this.is.a.string';

Je veux obtenir: okay this is a string.

Jusqu'ici j'ai essayé:

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

mais cela se termine avec toute la chaîne remplacée par des espaces.

402
Omar Abid

Vous devez échapper à . car il a la signification de "caractère arbitraire" dans une expression régulière.

mystring = mystring.replace(/\./g,' ')
729
aefxx

Une autre solution facile à comprendre :)

var newstring = mystring.split('.').join(' ');
298
Umesh Patil
/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
    var _token;
    var str = this + "";
    var i = -1;

    if ( typeof token === "string" ) {

        if ( ignoreCase ) {

            _token = token.toLowerCase();

            while( (
                i = str.toLowerCase().indexOf(
                    _token, i >= 0 ? i + newToken.length : 0
                ) ) !== -1
            ) {
                str = str.substring( 0, i ) +
                    newToken +
                    str.substring( i + token.length );
            }

        } else {
            return this.split( token ).join( newToken );
        }

    }
return str;
};

alert('okay.this.is.a.string'.replaceAll('.', ' '));

Plus rapide que d'utiliser regex ...

EDIT:
Peut-être qu'au moment où j'ai rédigé ce code, je n'ai pas utilisé jsperf. Mais au final, une telle discussion est totalement inutile, la différence de performances ne vaut pas la lisibilité du code dans le monde réel, ma réponse est donc toujours valable, même si les performances diffèrent de l'approche regex.

EDIT2:
J'ai créé une bibliothèque qui vous permet de le faire en utilisant une interface fluide:

replace('.').from('okay.this.is.a.string').with(' ');

Voir https://github.com/FagnerMartinsBrack/str-replace .

52
Fagner Brack
str.replace(new RegExp(".","gm")," ")
22
macemers

Pour ce scénario simple, je recommanderais également l’utilisation des méthodes intégrées au javascript.

Vous pouvez essayer ceci:

"okay.this.is.a.string".split(".").join("")

Salutations

13
Victor

J'ajoute une double barre oblique inversée au point pour le faire fonctionner. Acclamation.

var st = "okay.this.is.a.string";
var Re = new RegExp("\\.","g");
st = st.replace(Re," ");
alert(st);
6
kittichart

Ceci est plus concis/lisible et devrait donner de meilleurs résultats que celui publié par Fagner Brack (toLowerCase n’est pas exécuté en boucle):

String.prototype.replaceAll = function(search, replace, ignoreCase) {
  if (ignoreCase) {
    var result = [];
    var _string = this.toLowerCase();
    var _search = search.toLowerCase();
    var start = 0, match, length = _search.length;
    while ((match = _string.indexOf(_search, start)) >= 0) {
      result.Push(this.slice(start, match));
      start = match + length;
    }
    result.Push(this.slice(start));
  } else {
    result = this.split(search);
  }
  return result.join(replace);
}

Usage:

alert('Bananas And Bran'.replaceAll('An', '(an)'));
4
sstur

Voici une autre implémentation de replaceAll. J'espère que ça aide quelqu'un.

    String.prototype.replaceAll = function (stringToFind, stringToReplace) {
        if (stringToFind === stringToReplace) return this;
        var temp = this;
        var index = temp.indexOf(stringToFind);
        while (index != -1) {
            temp = temp.replace(stringToFind, stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    };

Ensuite, vous pouvez l'utiliser:

var myText = "Mon nom est George";
var newText = myText.replaceAll ("George", "Michael");

2
scripto
String.prototype.replaceAll = function(character,replaceChar){
    var Word = this.valueOf();

    while(Word.indexOf(character) != -1)
        Word = Word.replace(character,replaceChar);

    return Word;
}
2
Joel
String.prototype.replaceAll = function (needle, replacement) {
    return this.replace(new RegExp(needle, 'g'), replacement);
};
0
Danon

Exemple: je veux remplacer tous les doubles devis (") par des devis simples (') Ensuite, le code sera comme ceci

var str= "\"Hello\""
var regex = new RegExp('"', 'g');
str = str.replace(regex, '\'');
console.log(str); // 'Hello'
0
Neel Kamal

@ scripto est un peu plus concis et sans prototype:

function strReplaceAll(s, stringToFind, stringToReplace) {
    if (stringToFind === stringToReplace) return s;
    for (let index = s.indexOf(stringToFind); index != -1; index = s.indexOf(stringToFind))
        s = s.replace(stringToFind, stringToReplace);
    return s;
}

Voici comment ça se superpose: http://jsperf.com/replace-vs-split-join-vs-replaceall/68

0
A T
mystring.replace(new RegExp('.', "g"), ' ');
0
Idan