Quiero hacer que mi expresión regular ignore si hay alguna etiqueta entre dos caracteres. Pensé en obtener la lista de nodos secundarios y definir algunas cadenas que corresponden a las etiquetas de inicio y finalización de esos nodos, pero no pude resolver cómo hacer que mi expresión regular ignore esas etiquetas.
Por ejemplo, enumeré las etiquetas de inserción e hice esta matriz
let tags = ["<div class='cl'>","</div>","<span class='sp'>","</span>"]La cadena en la que quiero buscar mi expresión regular
let str = "The people <div class='cl'>in StackOverflow <span class='sp'> are very helpful.</span></div>"Y quiero encontrar "personas en StackOverflow" en este texto para obtener los índices de inicio y finalización. ¿Cómo puedo hacer eso?
Si la expresión regular coincide tanto con las etiquetas como con lo que no está en una etiqueta.
Luego puede capturar y conservar lo que no está en una etiqueta.
/<[^>]+>|([^<>]+)/g const str = "The people <div class='cl'>in StackOverflow <span class='sp'> are very helpful.</span></div>" let re = /<[^>]+>|([^<>]+)/g; let result = str.replace(re,'$1'); console.log(result); let positions = []; while (m = re.exec(str)) { if(m[1]) positions.push([m.index, re.lastIndex]) } console.log(positions);