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.
Vous devez échapper à .
car il a la signification de "caractère arbitraire" dans une expression régulière.
mystring = mystring.replace(/\./g,' ')
Une autre solution facile à comprendre :)
var newstring = mystring.split('.').join(' ');
/**
* 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(' ');
str.replace(new RegExp(".","gm")," ")
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
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);
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)'));
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");
String.prototype.replaceAll = function(character,replaceChar){
var Word = this.valueOf();
while(Word.indexOf(character) != -1)
Word = Word.replace(character,replaceChar);
return Word;
}
String.prototype.replaceAll = function (needle, replacement) {
return this.replace(new RegExp(needle, 'g'), replacement);
};
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'
@ 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
mystring.replace(new RegExp('.', "g"), ' ');