expression régulière pour correspondre exactement à 5 chiffres

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

je suis en train de lire un html complet en variable. De la variable, veulent saisir tous les numéros avec le modèle d'exactement 5 chiffres. Pas besoin de se soucier de savoir si avant/après ce chiffre ayant un autre type de mots. Veux juste m'assurer que tout ce qui est à 5 chiffres été attrapé.

cependant, quand je l'applique, il non seulement tirer le numéro avec exactement 5 chiffres, numéro avec plus de 5 chiffres également récupéré...

j'avais essayé mettre ^ à l'avant et $ derrière, mais il faire le résultat sortir comme null.

24
demandé sur i need help 2011-02-12 04:13:01

5 réponses

je suis en train de lire un fichier texte et je veux utiliser regex ci-dessous pour extraire des nombres avec exactement 5 chiffres, en ignorant les alphabets.

essayez ceci...

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

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

jsFiddle .

le mot limite \b est votre ami ici.

mise à Jour

mon regex obtiendra un nombre comme ceci 12345 , mais pas comme a12345 . Les autres réponses fournissent de grands regexes si vous avez besoin de ce dernier.

43
répondu alex 2011-02-12 01:44:43

Ma chaîne de test pour la suite:

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

si je comprends votre question, vous voulez ["12345", "54321", "15234", "52341"] .

si les moteurs JS supportaient regexp lookbehinds, vous pourriez faire:

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

Puisqu'il ne fait pas actuellement, vous pourriez:

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

et supprimer le premier non-chiffre 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 devez utilisez un RegExp stocké dans une variable plutôt qu'un regexp littéral dans la boucle while , sinon vous obtiendrez une boucle infinie.

5
répondu outis 2017-05-23 12:02:39

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
répondu Mark Eirich 2011-02-12 01:33:31

qu'est-ce qu'il y a? \D(\d{5})\D

Cela va faire:

f 23 23453 234 2344 2534 hallo33333 "50000

23453, 33333 50000

1
répondu Luke 2011-02-12 01:36:26

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

pour correspondre au motif du nombre de 5 chiffres n'importe où dans la chaîne, peu importe si elle est séparée par l'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 ( ✓ )

  • 1519150920 151950920 0000aaaa2 151960920 1519180920"
  • a1234a5 (bombe)

  • 12345 (✓)

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

0
répondu Muhammad Saqib 2018-07-15 21:44:23