Realmente estoy tratando de entender RegEx y siento que este problema debería ser fácil y directo, pero por alguna razón realmente estoy luchando para obtener exactamente lo que necesito. He revisado al menos 20 artículos aquí y ninguno de ellos me lleva allí.
Lo que necesito es capturar todas las palabras después de mirar hacia atrás para poder contarlas. Esto es lo que tengo hasta ahora:
RegEx: /(?<=\> )(\w*)/gi
Cadena: "Mon Jan 11 11:00 <ralph> Hello all!!"
Capture todas las palabras después de "> " , por lo que en lo anterior solo quiero que el grupo de captura capture individualmente "Hola" y "todos", para poder contar el grupo y obtener las palabras numéricas después del nombre de usuario, "<ralph>" en este ejemplo
El RegEx anterior es justo con lo que estoy trabajando actualmente y, por supuesto, solo captura la primera palabra. También intenté poner * y + después del grupo de captura, pero eso anula el grupo de captura por alguna razón.
También probé (?<=\> )((\w*)(?:\W+))* , y aunque esto coincide con todo después de mirar atrás, solo captura "todo". y "todas" en las 2 capturas diferentes. No estoy seguro de por qué "!!" esta volviendo en alguna captura ya que la tengo para emparejar solo con (?:).
Por ejemplo
const str = "Mon Jan 11 11:00 <ralph> Hello all. How are you?"; console.log( str.match(/(?<=\> (?:\w+\W+)*)\w+/g) );No estoy seguro de por qué "!!" esta volviendo en alguna captura ya que la tengo para emparejar solo con (?:).
Sí, pero también es capturado por el primer grupo de captura. Por ejemplo, si "x" coincide con ((?:x)) , entonces el primer grupo de captura contendrá "x" aunque también esté dentro del segundo grupo que no captura.
(?<=\> )(.+) funciona bien para mí, captura Hello all!! del Mon Jan 11 11:00 <ralph> Hello all!! ¿Es lo que necesitas?
¿Hay un patrón regular después de > o es aleatorio?
De todos modos, esto (?<=\> )(.*) coincide con su ejemplo.