testing= testing.match(/(\d{5})/g);
私は変数に完全なhtmlを読んでいます。変数から、正確に5桁のパターンを持つすべての数値を取得します。この数字の前後に他の種類の単語があるかどうかを気にする必要はありません。 5桁の数字が何であれ、確実に取得されるようにします。
しかし、私がそれを適用すると、ちょうど5桁の数字を引き出すだけでなく、5桁以上の数字も取得されます...
^
の前と$
の背後にありますが、結果がnullになります。
私はテキストファイルを読んでおり、以下の正規表現を使用して、アルファベットを無視して正確に5桁の数字を引き出したいと思います。
これを試して...
var str = 'f 34 545 323 12345 54321 123456',
matches = str.match(/\b\d{5}\b/g);
console.log(matches); // ["12345", "54321"]
jsFiddle 。
単語の境界\b
はあなたの友達です。
私の正規表現はこのような番号を取得します12345
、ただしnota12345
。他の回答は、後者が必要な場合に優れた正規表現を提供します。
次のテスト文字列:
testing='12345,abc,123,54321,ab15234,123456,52341';
あなたの質問を理解したら、["12345", "54321", "15234", "52341"]
。
JSエンジンが正規表現の後読みをサポートしている場合、次のことができます。
testing.match(/(?<^|\D)\d{5}(?=\D|$)/g)
現在はそうではないので、次のことができます。
testing.match(/(?:^|\D)(\d{5})(?=\D|$)/g)
適切な結果から先頭の非数字を削除するか、または:
pentadigit=/(?:^|\D)(\d{5})(?=\D|$)/g;
result = [];
while (( match = pentadigit.exec(testing) )) {
result.Push(match[1]);
}
IEの場合、while
ループではリテラル正規表現ではなく、 変数に保存されたRegExp を使用する必要があることに注意してください。そうしないと、無限ループになります。
これは動作するはずです:
<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>
これは何ですか? \D(\d{5})\D
これは以下を行います:
f 23 23453 234 2344 2534 hallo33333 "50000"
23453、33333 50000
この数字の前後に他の種類の単語があるかどうかを気にする必要はありません
文字列の任意の場所にある5桁の数字のパターンと一致させるには、スペースで区切られていようといまいと、この正規表現(?<!\d)\d{5}(?!\d)
。
サンプル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] ...
}
}
以下に簡単な結果を示します。
abc12345xyz(✓)
12345abcd(✓)
abcd12345(✓)
0000aaaa2(✖)
a1234a5(✖)
12345(✓)
<space>
12345<space>
12345(✓✓)