Me gustaría verificar que una cadena termina con cualquier Etiqueta abierta seguida o no por un texto
por ejemplo:
<div>some text hereo
<span>some text heredebe coincidir
pero
<div>some text here</div>o
<h1>some text here</h1>no debe
Traté de encontrar una solución (lo siento, no soy un profesional de expresiones regulares)
let anyOpenTag = '<([^/>][^>])*>'; let anyCloseTag = '</[^/>][^>]*>'; let neitherOpenNorCloseTag = `[^(${anyOpenTag}|${anyCloseTag})]`; let regex = new RegExp( escapeRegExp(`${anyOpenTag}${neitherOpenNorCloseTag}*$`), 'gi'); Establecí una variable "anyOpenTag" en una expresión regular que verifica si es una etiqueta abierta como ( <p> , <div> , <span> etc...
Establecí una variable "anyCloseTag" en una expresión regular que verifica si es una etiqueta de cierre como ( </p> , </div> , etc...)
Establecí una variable "niOpenNorCloseTag" que intenta combinar los dos y compruebo si no es uno de ellos usando [^....]
finalmente verifico si la expresión regular coincide con anyOpenTag + niOpenNorCloseTag
lamentablemente no me funciona, precisamente la parte que verifica "niAbrirNiCerrarEtiqueta"
Se agradece su ayuda, incluso si tiene una expresión regular mejor, se lo agradecería.
Basado en sus ejemplos, este fragmento funciona:
const regex = /<.*>.*<\/.*>/g const regexString = (regex) => { return (s) => { return !s.match(regex) } } const validateString = regexString(regex) const strings = [ '<div>some text here', '<span>some text here', '<div>some text here</div>', '<h1>some text here</h1>', ] const validated = strings.map(validateString) console.log('Result:', validated)