Estoy tratando de construir una expresión regular para dividir los registros de openldap en diferentes grupos de expresiones regulares
Registros:
620da112 conn=2871219 op=1 SRCH attr=extensionAttribute6 620da112 conn=2871220 fd=60 ACCEPT from IP=10.17.28.159:35708 (IP=0.0.0.0:19000) 620da112 conn=2871219 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= 620da112 conn=2871219 op=2 UNBIND 620da112 conn=2871219 fd=52 closed 620da112 conn=2871220 fd=60 TLS established tls_ssf=256 ssf=256 620da112 conn=2871220 op=0 BIND dn="cn=admin,dc=ClinicalPortal" method=128Necesito crear una expresión regular en la que deba dividir cada una en un grupo para poder asignarla a una variable y luego la parte restante después de la operación (DESVINCULACIÓN, cerrado, TLS establecido, VINCULACIÓN...) a una variable diferente (por ejemplo: etiqueta = 101 err = 0 nentries = 1 texto = a una variable diff) He probado la siguiente expresión regular hasta ahora, pero no funciona para todas las líneas e incluso no da los últimos valores (por ejemplo: tag=101 err=0 nentries=1 text= a una variable diff) como una sola expresión de grupo:
function printMatch(line){ const matchings = myRe.exec(line); console.log("Line --START"); if(matchings !=null){ for(var i=0;i<matchings.length;i++){ console.log("Group "+i+":"+matchings[i]); } } else { console.log("Line "+line+" do not match the REGEX"); } console.log("Line --END"); } const myRe = /^([A-Za-z[0-9]{8})\s([=A-Za-z[0-9]*)\s([=A-Za-z[0-9]*)\s([AZ\s{1}]*)/g; printMatch('620da112 conn=2871219 op=1 SRCH attr=extensionAttribute6'); printMatch('620da112 conn=2871220 fd=60 ACCEPT from IP=10.17.28.159:35708 (IP=0.0.0.0:19000)'); printMatch('620da112 conn=2871219 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text='); printMatch('620da112 conn=2871219 op=2 UNBIND'); printMatch('620da112 conn=2871220 fd=60 TLS established tls_ssf=256 ssf=256'); printMatch('620da112 conn=2871220 op=0 BIND dn="cn=admin,dc=ClinicalPortal" method=128');"¿El OP está buscando una tokenización similar a esta? ..
/^(?<id>[a-zA-Z0-9]{8})\s+(?<conn>\w+=\S+)\s+(?<op>\w+=\S+)\s+(?<cmd>.*?)\s*(?<rest>\w+=.*)?$/gm– Peter Seliger"¡Funciona de maravilla! ¿Podría responder a esta en lugar de un comentario? Me gustaría aceptarlo como respuesta". – Conquistador
const multilineSample = `620da112 conn=2871219 op=1 SRCH attr=extensionAttribute6 620da112 conn=2871220 fd=60 ACCEPT from IP=10.17.28.159:35708 (IP=0.0.0.0:19000) 620da112 conn=2871219 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= 620da112 conn=2871219 op=2 UNBIND 620da112 conn=2871219 fd=52 closed 620da112 conn=2871220 fd=60 TLS established tls_ssf=256 ssf=256 620da112 conn=2871220 op=0 BIND dn="cn=admin,dc=ClinicalPortal" method=128`; const regXNamedTokens = // see ... [https://regex101.com/r/k9mUPP/1] /^(?<id>[a-zA-Z0-9]{8})\s+(?<conn>\w+=\S+)\s+(?<op>\w+=\S+)\s+(?<cmd>.*?)\s*(?<rest>\w+=.*)?$/gm; console.log( 'all match results ...', Array.from( multilineSample.matchAll(regXNamedTokens) ) ); console.log( 'all results each with its mapped named capture group ...', Array.from( multilineSample.matchAll(regXNamedTokens) ) .map(({ groups }) => groups) ); .as-console-wrapper { min-height: 100%!important; top: 0; }