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.
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.
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.
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>
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
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 (✓✓)