web-dev-qa-db-ja.com

正確に5桁に一致する正規表現

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

私は変数に完全なhtmlを読んでいます。変数から、正確に5桁のパターンを持つすべての数値を取得します。この数字の前後に他の種類の単語があるかどうかを気にする必要はありません。 5桁の数字が何であれ、確実に取得されるようにします。

しかし、私がそれを適用すると、ちょうど5桁の数字を引き出すだけでなく、5桁以上の数字も取得されます...

^の前と$の背後にありますが、結果がnullになります。

30
i need help

私はテキストファイルを読んでおり、以下の正規表現を使用して、アルファベットを無視して正確に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。他の回答は、後者が必要な場合に優れた正規表現を提供します。

53
alex

次のテスト文字列:

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 を使用する必要があることに注意してください。そうしないと、無限ループになります。

7
outis

これは動作するはずです:

<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

これは何ですか? \D(\d{5})\D

これは以下を行います:

f 23 23453 234 2344 2534 hallo33333 "50000"

23453、33333 50000

1
Luke

この数字の前後に他の種類の単語があるかどうかを気にする必要はありません

文字列の任意の場所にある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(✓✓)

0
Muhammad Saqib