todas reemplazar quitar las especiales comas caracteres javascript node.js regex replace

quitar - reemplazar caracteres javascript



Reemplazar cadenas mĂșltiples con varias otras cadenas (12)

Estoy tratando de reemplazar varias palabras en una cadena con muchas otras palabras. La cadena es "Tengo un gato, un perro y una cabra".

Sin embargo, esto no produce "Tengo un perro, una cabra y un gato", sino que produce "Tengo un gato, un gato y un gato". ¿Es posible reemplazar cadenas múltiples con otras cadenas múltiples al mismo tiempo en JavaScript, para que se produzca el resultado correcto?

var str = "I have a cat, a dog, and a goat."; str = str.replace(/cat/gi, "dog"); str = str.replace(/dog/gi, "goat"); str = str.replace(/goat/gi, "cat"); //this produces "I have a cat, a cat, and a cat" //but I wanted to produce the string "I have a dog, a goat, and a cat".


Solución específica

Puede usar una función para reemplazar cada uno.

var str = "I have a cat, a dog, and a goat."; var mapObj = { cat:"dog", dog:"goat", goat:"cat" }; str = str.replace(/cat|dog|goat/gi, function(matched){ return mapObj[matched]; });

Ejemplo jsfiddle

Generalizándolo

Si desea mantener dinámicamente la expresión regular y simplemente agregar intercambios futuros al mapa, puede hacer esto

new RegExp(Object.keys(mapObj).join("|"),"gi");

para generar la expresión regular Entonces, se vería así

var mapObj = {cat:"dog",dog:"goat",goat:"cat"}; var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); str = str.replace(re, function(matched){ return mapObj[matched]; });

Y para agregar o cambiar más reemplazos, simplemente podría editar el mapa.

violín con expresiones regulares dinámicas

Haciéndolo reutilizable

Si quieres que esto sea un patrón general, puedes sacar esto a una función como esta

function replaceAll(str,mapObj){ var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); return str.replace(re, function(matched){ return mapObj[matched.toLowerCase()]; }); }

Entonces podrías pasar la str y un mapa de los reemplazos que quieras a la función y devolvería la cadena transformada.

violín con la función

Para asegurarse de que Object.keys funcione en navegadores más antiguos, agregue un polyfill, por ejemplo, de MDN o Es5 .


Con mi paquete de replace-once , podrías hacer lo siguiente:

const replaceOnce = require(''replace-once'') var str = ''I have a cat, a dog, and a goat.'' var find = [''cat'', ''dog'', ''goat''] var replace = [''dog'', ''goat'', ''cat''] replaceOnce(str, find, replace, ''gi'') //=> ''I have a dog, a goat, and a cat.''


En caso de que alguien se pregunte por qué la solución del póster original no funciona:

var str = "I have a cat, a dog, and a goat."; str = str.replace(/cat/gi, "dog"); // now str = "I have a dog, a dog, and a goat." str = str.replace(/dog/gi, "goat"); // now str = "I have a goat, a goat, and a goat." str = str.replace(/goat/gi, "cat"); // now str = "I have a cat, a cat, and a cat."


Escribí este paquete npm stringinject https://www.npmjs.com/package/stringinject que le permite hacer lo siguiente

var string = stringInject("this is a {0} string for {1}", ["test", "stringInject"]);

que reemplazará el {0} y {1} con los elementos de la matriz y devolverá la siguiente cadena

"this is a test string for stringInject"

o puede reemplazar los marcadores de posición con claves y valores de objeto de esta manera:

var str = stringInject("My username is {username} on {platform}", { username: "tjcafferkey", platform: "GitHub" }); "My username is tjcafferkey on Github"


Esto funcionó para mí:

String.prototype.replaceAll = function(search, replacement) { var target = this; return target.replace(new RegExp(search, ''g''), replacement); }; function replaceAll(str, map){ for(key in map){ str = str.replaceAll(key, map[key]); } return str; } //testing... var str = "bat, ball, cat"; var map = { ''bat'' : ''foo'', ''ball'' : ''boo'', ''cat'' : ''bar'' }; var new = replaceAll(str, map); //result: "foo, boo, bar"


Esto puede no satisfacer su necesidad exacta en este caso, pero he encontrado que esta es una forma útil de reemplazar múltiples parámetros en cadenas, como una solución general. Reemplazará todas las instancias de los parámetros, sin importar cuántas veces se mencionen:

String.prototype.fmt = function (hash) { var string = this, key; for (key in hash) string = string.replace(new RegExp(''//{'' + key + ''//}'', ''gm''), hash[key]); return string }

Lo invocaría de la siguiente manera:

var person = ''{title} {first} {last}''.fmt({ title: ''Agent'', first: ''Jack'', last: ''Bauer'' }); // person = ''Agent Jack Bauer''


Expandí un poco en @BenMcCormicks. Trabajaba para cadenas regulares, pero no si había escapado de personajes o comodines. Esto es lo que hice

str = "[curl] 6: blah blah 234433 blah blah"; mapObj = {''//[curl] *'': '''', ''//d: *'': ''''}; function replaceAll (str, mapObj) { var arr = Object.keys(mapObj), re; $.each(arr, function (key, value) { re = new RegExp(value, "g"); str = str.replace(re, function (matched) { return mapObj[value]; }); }); return str; } replaceAll(str, mapObj)

regresa "blah blah 234433 blah blah"

De esta forma, coincidirá con la clave en mapObj y no con la palabra coincidente ''


Use elementos numerados para evitar el reemplazo de nuevo. p.ej

let str = "I have a %1, a %2, and a %3"; let pets = ["dog","cat", "goat"];

entonces

str.replace(/%(/d+)/g, (_, n) => pets[+n-1])


Uso de Jquery Reemplazar múltiples cadenas con múltiples otras cadenas

var replacetext = { "abc": "123", "def": "456" "ghi": "789" }; $.each(replacetext, function(txtorig,txtnew) { $(".eng-to-urd").each(function(){ $(this).text($(this).text().replace(txtorig, txtnew)); }); });


función regular del usuario para definir el patrón a reemplazar y luego usar la función reemplazar para trabajar en la cadena de entrada,

var i = new RegExp(''"{'',''g''), j = new RegExp(''}"'',''g''), k = data.replace(i,''{'').replace(j,''}'');


<!DOCTYPE html> <html> <body> <p id="demo">Mr Blue has a blue house and a blue car.</p> <button onclick="myFunction()">Try it</button> <script> function myFunction() { var str = document.getElementById("demo").innerHTML; var res = str.replace(//n| |car/gi, function myFunction(x){ if(x==''/n''){return x=''<br>'';} if(x=='' ''){return x=''&nbsp'';} if(x==''car''){return x=''BMW''} else{return x;}//must need }); document.getElementById("demo").innerHTML = res; } </script> </body> </html>


String.prototype.replaceSome = function() { var replaceWith = Array.prototype.pop.apply(arguments), i = 0, r = this, l = arguments.length; for (;i<l;i++) { r = r.replace(arguments[i],replaceWith); } return r; }

/ * replaceSome método para cadenas toma como, muchos argumentos como queremos y reemplaza a todos con el último argumento que especificamos 2013 CopyRights guardado para: Max Ahmed este es un ejemplo:

var string = "[hello i want to ''replace x'' with eat]"; var replaced = string.replaceSome("]","[","''replace x'' with",""); document.write(string + "<br>" + replaced); // returns hello i want to eat (without brackets)

* /

jsFiddle: http://jsfiddle.net/CPj89/