/**
* 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('.', ' '));
más rápido que usar expresiones regulares ...
EDIT:
Tal vez en el momento en que hice este código no usé jsperf. Pero al final, tal discusión es totalmente inútil, la diferencia de rendimiento no vale la legibilidad del código en el mundo real, por lo que mi respuesta sigue siendo válida, incluso si el rendimiento difiere del enfoque de expresión regular.
Edit2:
He creado una librería que le permite hacer esto utilizando una interfaz fluida:
replace('.').from('okay.this.is.a.string').with(' ');
Ver https://github.com/FagnerMartinsBrack/str-replace.
de aefxx es correcto, pero al igual que un FYI es que el carácter del período en una expresión regular significa emparejar _todo_, por lo tanto, todo es un espacio. Escapar con la barra invertida significa coincidir en los períodos. – swilliams
Gracias por la sugerencia. Tengo algunos momentos AHA (cuando construyo la aplicación) con Regex. Realmente lo odio * _ *, ¿tienes algún buen y genial tutorial? –
rubular.com es lo que está buscando – LanguagesNamedAfterCofee