web-dev-qa-db-fra.com

expression régulière correspondant exactement à 5 chiffres

testing= testing.match(/(\d{5})/g);

Je lis un code HTML complet en variable. À partir de la variable, voulez extraire tous les nombres avec un motif d’exactement 5 chiffres. Pas besoin de se soucier de savoir si avant/après ce chiffre ayant un autre type de mots. Je veux juste m'assurer que tout ce qui est composé de 5 chiffres a été saisi.

Cependant, lorsque je l'applique, il ne sort pas seulement un nombre avec exactement 5 chiffres, un nombre avec plus de 5 chiffres également récupéré ...

J'avais essayé de mettre ^ devant et $ derrière, mais cela rendait le résultat nul.

26
i need help

Je lis un fichier texte et veux utiliser l'expression rationnelle ci-dessous pour extraire des nombres avec exactement 5 chiffres, en ignorant les alphabets.

Essaye ça...

var str = 'f 34 545 323 12345 54321 123456',
    matches = str.match(/\b\d{5}\b/g);

console.log(matches); // ["12345", "54321"]

jsFiddle .

La limite de mot \b est votre ami ici.

Mettre à jour

Mon regex recevra un nombre comme ceci 12345, mais pas comme a12345. Les autres réponses fournissent d'excellentes expressions rationnelles si vous avez besoin de ces dernières.

48
alex

Ma chaîne de test pour les éléments suivants:

testing='12345,abc,123,54321,ab15234,123456,52341';

Si je comprends votre question, vous voudriez ["12345", "54321", "15234", "52341"].

Si les moteurs JS prennent en charge les expressions rationnelles, vous pouvez effectuer les opérations suivantes:

testing.match(/(?<^|\D)\d{5}(?=\D|$)/g)

Comme ce n'est pas le cas actuellement, vous pourriez:

testing.match(/(?:^|\D)(\d{5})(?=\D|$)/g)

et supprimez le non-chiffre de gauche des résultats appropriés, ou:

pentadigit=/(?:^|\D)(\d{5})(?=\D|$)/g;
result = [];
while (( match = pentadigit.exec(testing) )) {
    result.Push(match[1]);
}

Notez que pour IE, il semble que vous deviez utiliser un RegExp stocké dans une variable plutôt que une expression rationnelle littérale dans la boucle while, sinon vous obtiendrez une boucle infinie.

6
outis

Cela devrait fonctionner:

<script type="text/javascript">
var testing='this is d23553 test 32533\n31203 not 333';
var r = new RegExp(/(?:^|[^\d])(\d{5})(?:$|[^\d])/mg);
var matches = [];
while ((match = r.exec(testing))) matches.Push(match[1]);
alert('Found: '+matches.join(', '));
</script>
2
Mark Eirich

Pas besoin de se soucier de savoir si avant/après ce chiffre ayant un autre type de mots

Pour faire simplement correspondre le modèle de nombre à 5 chiffres n'importe où dans la chaîne, qu'il soit séparé par un espace ou non, utilisez cette expression régulière (?<!\d)\d{5}(?!\d).

Exemples de codes JavaScript: 

var regexp = new RegExp(/(?<!\d)\d{5}(?!\d)/g); 
    var matches = yourstring.match(regexp);
    if (matches && matches.length > 0) {
        for (var i = 0, len = matches.length; i < len; i++) {
            // ... ydo something with matches[i] ...
        } 
    }

Voici quelques résultats rapides.

  • abc12345xyz (✓)

  • 12345abcd (✓)

  • abcd12345 (✓)

  • 0000aaaa2 () 

  • a1234a5 (✖)

  • 12345 (✓)

  • <space>12345<space>12345 (✓ ✓)

0
Muhammad Saqib