La página de documentación: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll
let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:"; let newstring = string.replaceAll(":insertx:", 'hello!'); Cuando ejecuto esto, recibo Uncaught TypeError: string.replaceAll is not a function . Tal vez no entiendo qué es un prototipo, pero la función parece ser un método de cadena que está disponible para su uso.
Estoy usando Chrome.
Use replace con una expresión regular con el modificador global para una mejor compatibilidad con el navegador. (Consulte la tabla de compatibilidad de navegadores en MDN para ver qué versión de cada navegador comenzó a admitir el método replaceAll ).
let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:"; let newstring = string.replace(/:insertx:/g, 'hello!'); console.log(newstring); Para una solución más genérica, podemos escapar de los metacaracteres de expresiones regulares y usar el constructor RegExp . También puede agregar la función a String.prototype como un polyfill.
(Es necesario escapar de la cadena para reemplazar, de modo que los caracteres que tienen significados especiales en las expresiones regulares se interpreten literalmente, por ejemplo . se referirán solo a los puntos reales en lugar de a cualquier carácter).
//Taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string } function replaceAll(str, match, replacement){ return str.replace(new RegExp(escapeRegExp(match), 'g'), ()=>replacement); } console.log(replaceAll('abcde', '.', '__')); console.log(replaceAll('abcde', '.', '$&'));Puede encontrar una cuña que cumpla con las especificaciones aquí .
.replaceAll estará disponible a partir de Chrome 85. La versión actual es 83.
Si descarga Google Chrome Canary (que está en la versión 86), podrá ver que su código funciona bien. Firefox está en la versión 78, y dado que .replaceAll ha estado disponible a partir de la versión 77, también funciona allí. También funcionará en el Safari actual. Microsoft Edge lo tiene como no compatible.
Encontrará versiones de navegador compatibles en la parte inferior del artículo en su pregunta.
Si no desea actualizar su Chrome ni usar expresiones reg (ya que tienen menos rendimiento), también puede hacer esto:
let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:"; let newstring = string.split(":insertx:").join('hello!');Y, por supuesto, puede adjuntarlo al prototipo de String si lo desea en todas partes. Pero dado que el replaceAll real tiene más funciones (admite expresiones regulares), en cambio, estaría más seguro haciendo:
String.prototype.replaceAllTxt = function replaceAll(search, replace) { return this.split(search).join(replace); }