Digamos que tengo una cadena como esta:
This is just a test {#3,2,7,9} this is another test {#21,2,11} ¿Cómo puedo recuperar todas las instancias de {#x,y,..} y reemplazarlo con un número aleatorio que contiene?
Por ejemplo, la cadena anterior podría convertirse en:
This is just a test 2 this is another test 11Intenta usar el método replace()
Demostración de expresiones regulares
https://regex101.com/r/s3O59z/1
let string = 'This is just a test {#3,2,7,9} this is another test {#21,2,11}' let result = string.replace(/{#(.*?)}/g, (match, p1) => { let nums = p1.split(',') return nums[Math.floor(Math.random() * nums.length)] }) console.log(result)Hay varias maneras de hacer esto. La forma más moderna es usar un literal de plantilla . Para recuperar un valor aleatorio de una Array dada, puede crear un pequeño método auxiliar. Algo como:
const randomValue = arr => arr[Math.floor(Math.random() * arr.length)]; const testing = `This is just a test ${ randomValue([3,2,7,9,112,18,37,12])} this is another test ${ randomValue([21,2,11,98,22,1200,7,24])}`; [...Array(5)].forEach( v => { console.log( `This is just a test ${ randomValue([3,2,7,9,112,18,37,12])} / this is another test ${ randomValue([21,2,11,98,22,1200,7,24])}`); }); //console.log(testing);