La intención de la expresión regular es capturar subcadenas envueltas entre expresiones gemelas entre paréntesis, algo así como etiquetas html. Por ejemplo:
<p id="textTwo">And this shall be (blue)the ocean(blue) and this shall also be like (blue)the ocean(blue)</p>Y aquí está mi código
let color = 'blue'; let getColor = new RegExp(`(${color})(.*)(${color})`); let coloredText = textTwo.match(getColor); let text = document.getElementById('text').innerText; let textTwo = document.getElementById('text2').innerText; let color = 'blue'; let getColor = new RegExp(`(${color})(.*)(${color})`); let coloredText = textTwo.match(getColor); // italicsText.forEach((string, index) => { // string.replace("(i)", "<i>"); // console.log(typeof(string)); // }); // text.replace(italics, "<i>"); let italics = text.replace(/\((.*?)\)/g, (_, match) => `<${match}>`); console.log(italics); console.log(italics); console.log(coloredText); <p id="text">Hello there (i)Good Sir(i). How can I help you (i)today(i)</p> <p id="text2">And this shall be (blue)ao!(blue) and this shall also be (blue)like the ocean(blue)</p>¿Alguien puede decirme por qué esto no captura todo?
La expresión regular para el caso específico '(blue)' sería ... /\(blue\)(?<colored>.*?)\(blue\)/g .
El literal de expresiones regulares anterior (necesita) escapar de caracteres específicos de expresiones regulares como ( y ) porque tienen un significado especial como para los dos últimos que marcan un grupo de captura.
Para hacer coincidir/capturar dinámicamente los patrones relacionados con el valor del color, es necesario utilizar
En comparación con el literal regex, uno proporciona un parámetro de pattern basado en cadenas para el constructor RegExp donde uno necesita escapar de los caracteres de escape del patrón ( \ a '\\' ).
const sampleText = 'And this shall be (blue)the ocean(blue) and this shall also be like (blue)another ocean(blue)'; const sampleColor = 'blue'; // see ... [https://regex101.com/r/eHCaWJ/1] // ... /\(blue\)(?<colored>.*?)\(blue\)/g const regExpColored = RegExp(`\\(${ sampleColor }\\)(?<colored>.*?)\\(${ sampleColor }\\)`, 'g'); console.log( 'all matches ...', sampleText .match(regExpColored) ) console.log( 'any capture ...', Array .from( sampleText .matchAll(regExpColored) ) .map(({ groups: { colored }}) => colored) ) .as-console-wrapper { min-height: 100%!important; top: 0; }Los caracteres () son especiales en una expresión regular y deben escaparse con \ si desea que coincidan literalmente. Y debido a que \ en un literal de cadena de JavaScript también es especial, debe escaparse con otro \ :
let color = 'blue'; let getColor = new RegExp(`\\(${color}\\)(.*)\\(${color}\\)`);