Estoy tratando de resolver el siguiente escenario con javascript regexp:
tengo el siguiente texto:
<foo>a</foo>blah <bar>blah</bar><abc>dsdfsdf</abc> blah<foo>b</foo><blah></blah>{COMPANY_NAME} Me gustaría capturar {COMPANY_NAME} con texto dentro de la etiqueta foo anterior.
así que aquí estoy tratando de encontrar el texto b que existe dentro de la primera etiqueta foo detrás de COMPANY_NAME.
la única forma que encontré para hacerlo es comenzar con un personaje codicioso, lo que significa usar esto:
/.*<foo>(.*?)<\/foo>.*?{COMPANY_NAME}/ si no empiezo con la selección codiciosa al principio ( .* ), entonces proporcionará el primer foo en lugar del último, el problema es que este documento es realmente grande y requiere mucha memoria y requiere un Mucho tiempo para regresar cada partido y estoy haciendo muchos partidos.
¿Hay alguna manera de resolverlo sin comenzar con el codicioso .* ? y solo para devolver el último foo correctamente para que el partido solo contenga lo que necesito y no más que eso.
Gracias
Puede usar esta expresión regular sin codiciosos iniciales .* :
<foo>((?:(?!<\/?foo>).)*?)<\/foo>(?:(?!<\/?foo>).)*?{COMPANY_NAME} Aquí (?:(?!<\/?foo>).)*? es un patrón codicioso templado que coincide con cero o más caracteres donde cada carácter no debe ir seguido de <foo> o </foo> .