web-dev-qa-db-fra.com

Lookbehind négatif sur un groupe de capture

J'essaie d'écrire des expressions rationnelles qui me permettront de faire un lookbehind négatif sur un groupe de capture afin de pouvoir extraire les références possibles des e-mails. J'ai besoin de savoir comment regarder derrière d'un certain point jusqu'au premier espace blanc. Si un chiffre est trouvé, je ne veux pas que la référence soit extraite.

J'ai obtenu autant que montré ci-dessous. J'ai 2 groupes de capture - "PreRef" et "Ref". Je ne veux pas qu'une correspondance "Ref" soit trouvée si "PreRef" contient un chiffre. Ce que j'ai jusqu'à présent vérifie uniquement si le caractère immédiatement avant les deux-points est un chiffre.

(?<PreRef>\S+)(?<![\d]):(?<Ref>\d{5})

Une correspondance "Réf" de 12345 doit être trouvée ici:

This is a reference:12345

Mais pas ici (il y a un 5 dans le mot "référence"):

This is not a ref5rence:12345
6
Lank

Je suis sûrement d'accord avec John , et nous pouvons utiliser une expression simple, si les chiffres ne sont pas autorisés avant :, tel que:

^\D+:(\d{5})

ou:

^\D+:(\d{5})$

Si nous voulons ajouter plus de frontières, nous pouvons sûrement le faire aussi.

Démo

Circuit RegEx

jex.im visualise les expressions régulières:

enter image description here

Tester

const regex = /^\D+:(\d{5})/gm;
const str = `This is a reference:12345
This is not a ref5rence:12345`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
1
Emma