Estoy tratando de escribir una expresión regular que debe devolver cada nombre de etiqueta, nombre de atributo y valor de atributo
Aquí está el ejemplo de código
Hello, My name is Jack, This is my selfie: [img id='4' src="imageurl"] Below is the quick-link to my profile [profile username='jackisbest']Necesito obtener cualquier texto encerrado entre [ ]
También necesito javascript regex para analizarlos y unirlos de esta manera
> Match 1: img > Match 2: id='4' Group 1: id Group 2: 4 > Match 3: src="imageurl" Group 1: src Group 2: imageurlEsta es la expresión regular que estoy usando, pero solo puede hacer coincidir los atributos y el valor
(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']¡¡Gracias!!
Modifiqué su expresión regular para capturar el nombre de la etiqueta y usé grupos de captura con nombre.
/\[?(?<tagName>\w+)\s?(?<attName>\S+)=['"]?(?<attValue>(?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']/gm
Esto podría funcionar para usted.
Prueba aquí: https://regex101.com/r/kT7pG4/1
Puedes usar
/\[([a-zA-Z]\w*)|([^=\s]+)=["'](.*?)["']/gVea la demostración de expresiones regulares . Detalles :
\[([a-zA-Z]\w*) - un [ carácter y luego una letra seguida de cero o más caracteres de palabra (letras, dígitos, guiones bajos)| o([^=\s]+) - uno o más caracteres que no sean = y espacio en blanco= - a = carácter["'](.*?)["'] - " o ' , luego cero o más caracteres, la menor cantidad posible (capturados en el Grupo 3), y luego un " o ' carácter.Si desea tener en cuenta la apertura [ y el cierre ] y se admite el cuantificador en el análisis posterior, puede usar:
(?<=\[(\w+\b)[^\][\n]*)([^\s=]+)=['"]([^'"]*)['"](?=[^\][\n]*])(?<= Mirada positiva hacia atrás para afirmar que lo que está a la izquierda es\[ Partido [(\w+\b) Capturar grupo 1 , hacer coincidir 1+ caracteres de palabra[^\][\n]* Opcionalmente, haga coincidir cualquier carácter excepto [ ] o una nueva línea) Cerrar la mirada detrás([^\s=]+)=['"]([^'"]*)['"] Grupo de captura 2 y grupo 3 para la clave y el valor(?=[^\][\n]*]) Afirmar un ] a la derechaDemostración de expresiones regulares
El patrón tiene en el grupo 1 el valor del valor justo después de la apertura [ y el grupo 2 y el grupo 3 son los valores de los pares clave y valor:
const regex = /(?<=\[(\w+\b)[^\][\n]*)([^\s=]+)=['"]([^'"]*)['"](?=[^\][\n]*])/g; const str = `Hello, My name is Jack, This is my selfie: [img id='4' src="imageurl"] Below is the quick-link to my profile [profile username='jackisbest' a='b']`; let m; console.log(Array.from(str.matchAll(regex), m => [m[1], m[2], m[3]]));