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