Estoy tratando de reemplazar palabras en una cadena con una clave coincidente y una posición de índice sin eliminar las otras palabras.
Mi resultado deseado es: hey HI hey HELLO
Lo que he probado hasta ahora...
var data = { items: ["item", "HI", "item2"], moreitems: ["moreitem", "moreitem1", "HELLO"] } var str = "hey #items1 hey #moreitems2"; var newStr = ''; var match = str.match(/#(.*?)\d+/g); //get str that starts with # and ends with digits for (var i = 0; i < match.length; i++) { var keys = match[i].replace(/#|\d+/g, ''), // remove hash and numbers to match the data keys pos = match[i].replace(/\D/g, ''); // get the digits in str newStr += data[keys][pos] + ' '; } console.log(newStr)¡Gracias por tu ayuda!
Una solución simple sería usar replace() con una función de reemplazo.
Uso la expresión regular /#(\D+)(\d+)/g . # coincidente, seguido de uno o más que no sean dígitos (colocados en el grupo de captura 1), seguidos de uno o más dígitos (colocados en el grupo de captura 2).
Todos los grupos de captura se pasan como argumentos de la función de reemplazo. La coincidencia completa se pasa como primer argumento, el grupo de captura 1 como segundo, etc.
Dentro de la función de reemplazo, puede acceder al valor según el índice y el nombre del atributo capturado.
var data = { items: ["item", "HI", "item2"], moreitems: ["moreitem", "moreitem1", "HELLO"] } var str = "hey #items1 hey #moreitems2"; const result = str.replace( /#(\D+)(\d+)/g, (_match, attr, index) => data[attr][index] ); console.log(result);puedes usar
match[match.length - 1]category = match.slice(0, -1).substring(1); var data = { items: ["item", "HI", "item2"], moreitems: ["moreitem", "moreitem1", "HELLO"] } var str = "hey #items1 hey #moreitems2"; var newStr = str; var match = str.match(/#(.*?)\d+/g); var index, category; console.log(match); match.forEach(match => { index = match[match.length - 1]; category = match.slice(0, -1).substring(1); newStr = newStr.replace(match, data[category][index]); }); console.log(newStr)const dic = { xxx: 'hello', yyy: 'world', zzz: 'peace' } const string = 'hey! #xxx, #yyy! #zzz on you' const newString = string.replace(/#\w+/g, item => dic[item.substring(1)]) console.log(string) console.log(newString)