0
votes

Comment détecter le groupe de caractères dans une chaîne à l'aide de RegEx?

J'ai des chaînes comme suit: xxx

J'ai besoin de lire les deux derniers caractères de chaque chaîne comme suit. Il y aura au plus un nombre après les personnages à la fin, quels que soient les chiffres. J'ai besoin de lire les derniers caractères comme suit: xxx

J'ai utilisé la chaîne de regex comme suit, mais il ne lit que les deux derniers caractères de deux / trois quand il n'y a pas d'autres numéros suivants. xxx

toute aide est appréciée.


3 commentaires

\ d {2,3} (? = \ d * $) ou [a-za-z] {2,3} (? = \ d * $) ?


[A-Z] {2,3} ((? = \ D \ b) | (? = \ R) | (? = \ \.) | (? = \ B))


C'est correct.


4 Réponses :


1
votes

bonne question, nous utiliserions la ponctuation ou l'espace du côté droit de nos deux ou trois lettres souhaitées avec une expression simple: xxx pré>

et sur sa gauche, nous utiliserions l'existant Numéro comme limite gauche. P>

Démo h3>

p>

const regex = /[0-9]([A-Z]{2,3})([0-9])?[,.\s]/gm;
const str = `M0122PD12XS1, 
M1213234NW, 
M1213234EFA1.
M0122PD12XS1
M1213234NW
M1213234EFA1
`;
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 commentaires

La question implique qu'il n'y a pas de symboles de ponctuation à la fin, et je soupçonne ces , et . ne sont que "formatage" des marques de ponctuation.



1
votes

Ceci pourrait être ce dont vous avez besoin: xxx

look ici < / a> pour tester et ici pour la visualisation.


2 commentaires

Je n'ai besoin que de tirer les deux ou trois derniers caractères. Pas besoin de nombre de caractères. Par exemple, M123123XS1, j'ai besoin de XS uniquement.


@PCG J'ai tapé la chaîne que vous avez fournie et cela a fonctionné comme vous avez demandé. La regex ne correspond même pas aux numéros dans les lettres finales uniquement indiquées par [a-za-z]



1
votes

Je pense que cela devrait être

([a-z] {2,}) (?: [. \ s \ d] +)? $

Si aucune ponction requise dans la ligne se termine, juste

([a-z] {2,}) (?: [\ d] +)? $

où [AZ] {2,} a 2 lettres et plus de lettres, [\ d] +)? sont des numéros optionnels à la fin de la chaîne.


3 commentaires

Pourquoi Obfusque autant? (?: [\ d] +)? = \ d * .


J'ai seulement besoin des deux derniers caractères. Mais votre script tire des nombres avec les derniers caractères.


@PCG: Non, il y a ?: au début du deuxième groupe, le résultat est donc juste [a-z] {2,} . Vous pouvez l'essayer, rien de plus facile :-) Il n'y a rien de tel que prend juste le dernier groupe dans Regex, vous devez le définir autre chose. Si vous ne voulez pas le reste (numéro), il suffit d'ajouter ?: pour les ignorer.



1
votes

[A-Z] {2,3} ((? = \ d \ b) | (? = \ r) | (? =. =.) | (? = \ b))

trouve 2 ou 3 caractères alpha [A-Z] {2,3}

jusqu'à, mais non compris (? =) soit

  • un seul chiffre, suivi d'une limite de mot (? = \ d \ b)
  • caractère de retour (? = \ r)
  • caractère d'époque (? = \ \.)
  • limite de mot (? = \ b)

0 commentaires