Tengo una expresión regular simple en la que intento extraer el valor principal, incluidos los corchetes. Pero por alguna razón, devuelve la cadena completa cada vez.
Cadena de muestra [1] My well-being si incluye [####] Quiero poder obtener el contenido de los resultados de la coincidencia para poder obtener [4] como resultado.
const arr = [ 'I am not valid', '[1] My well-being', '[1] I conversation about', '[3] I role within', '[3] I members in the company', '[3]I priorities', '[3]How other teams', '[4] I within a team', '[4] I am a peer', '[4] I am a label', '[4] I am a label' ] const regex = /^(\[\d+\])(.*)/img; for (let index = 0; index < arr.length; index++) { const name = arr[index]; const match = name.match(regex); console.log(match) }Es por tu uso de la bandera g .
Para citar la documentación :
- Si se usa el indicador
g, se devolverán todos los resultados que coincidan con la expresión regular completa, pero no los grupos de captura.- si no se usa el indicador
g, solo se devuelve la primera coincidencia completa y sus grupos de captura relacionados. En este caso, el artículo devuelto tendrá propiedades adicionales como se describe a continuación.
Puede solucionar esto simplemente eliminando g de su expresión regular, luego name.match() también devolverá la captura de grupos.
Si solo desea el número entre paréntesis, omita .* después.
Tampoco necesitas ninguna de las banderas. i es para coincidencias que no distinguen entre mayúsculas y minúsculas, pero no tiene ninguna letra. m hace que ^ y $ coincidan con los finales de línea, pero no tiene cadenas de varias líneas. Y g es para forzar todas las coincidencias, pero dado que el patrón está anclado, solo puede haber una coincidencia.
Y dado que el patrón es ahora el partido completo, no necesita un grupo de captura a su alrededor.
const arr = [ 'I am not valid', '[1] My well-being', '[1] I conversation about', '[3] I role within', '[3] I members in the company', '[3]I priorities', '[3]How other teams', '[4] I within a team', '[4] I am a peer', '[4] I am a label', '[4] I am a label' ] const regex = /^\[\d+\]/; for (let index = 0; index < arr.length; index++) { const name = arr[index]; const match = name.match(regex); console.log(match) }