72351


正規表現を勉強しているものです。`.`はあらゆるものにマッチする特殊文字で`*`は直前文字が0回以上、`\d`は0~9の数字`{5}`それが5回繰り返されるものにマッチする。5文字あらほとんどの文字にマッチするのでしょうか？

>
[code]

>     const input = "Address: 333 Main St., Anywhere, NY, 55532. Phone:
>     555-555-2525.";
>     const match = input.match(/.*\d{5}/);
>     console.log(match)
>  
>     //実行結果
>     [
>       'Address: 333 Main St., Anywhere, NY, 55532',
>       index: 0,
>       input: 'Address: 333 Main St., Anywhere, NY, 55532. Phone:
> 555-555-2525.',
>       groups: undefined
>     ]
>  
[/code]

>
> 本では5桁の郵便番号をひとつ探していて、その他のものは何も必要がないとします。

と直前に書かれていたので  
イメージでは`55532`が出力されると思っていたのですが全然違う物が出力されて困っています。  
助けて頂けないでしょうか？

引用元  
1)Ethan Brown. Learning JavaScript, 3rd Edition. O'Reilly. イーサン ブラウン ムシャ ヒロユキ
ムシャ ルミ (訳) 2017. 「17章 正規表現」.『初めてのJavascript』. 第3版. オライリージャパン. pp 290.


CC BY-SA 4.0
2020-12-02T11:17:34.577
72349
2020-12-02T12:11:54.570
2020-12-02T12:11:54.570
22565
22565
question
javascript 正規表現
JavaScriptの正規表現の/.*\d{5}/がイメージする動作と異なる。


"5桁の数字" にマッチさせたいだけなら、`\d{5}` だけでも事足りるはずです。

前後に不要な文字列が出てくる場合を想定して `.*` などを使うなら、取り出したい部分の前後を `()` で囲んでグループ化してください。

[code]

    const match = input.match(/.*\d{5}/);
    
[/code]

実行結果の "groups" の中に、`()` の中のパターンにマッチした文字列が代入されているはずです。


CC BY-SA 4.0
2020-12-02T11:44:33.137
72350
2020-12-02T11:44:33.137
3060
72349
answer


その書籍のことは知らないですが、この正規表現を可視化してくれるサイトによると、  
[regexper.com](https://regexper.com/)

該当の正規表現を入力すると以下の図が表示されます。

[![正規表現画像](https://i.stack.imgur.com/MsRHG.jpg)](https://i.stack.imgur.com/MsRHG.jpg)

つまり任意の文字の任意の繰り返しの後、数字が5桁並んだところを終端とする文字列を指定していることになります。

そのため、数字が5桁並んだところの **「「行の頭から」5桁並んだ数字まで」** がmatchしたことになって、質問の結果になったものと思われます。

@cubick さんの回答のように、5桁並んだ数字だけが必要なら`\d{5}`だけで良いはずです。


CC BY-SA 4.0
2020-12-02T11:48:24.500
72351
2020-12-02T11:48:24.500
26370
72349
answer