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

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

しかし、当てはめてみると5桁きっちりの数字だけでなく、5桁以上の数字も検索されてしまい…

^前後に入れてみ$たのですが、結果がnullになってしまいました。

4

5 に答える 5

81

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

于 2011-02-12T01:19:26.470 に答える
7

次のテスト文字列:

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 の場合、ループ内でリテラル正規表現ではなく、変数に格納された RegExpwhileを使用する必要があるようです。そうしないと、無限ループが発生します。

于 2011-02-12T01:34:02.853 に答える
2

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

これは次のようになります。

f 23 23453 234 2344 2534 hallo33333 "50000"

23453、3333350000

于 2011-02-12T01:36:26.137 に答える
2

これはうまくいくはずです:

<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>
于 2011-02-12T01:33:31.210 に答える