44816


たとえば、  
`123, 45, 67, 890, 10,`  
といった数列が用意されていたとして、このときの  
,45 と ,67 と ,10  
の"カンマだけ"にマッチするような正規表現を考えています。

二桁の要素は、  
カンマ→数字→数字→カンマ  
であると考えて  
`new RegExp(/,[0-9][0-9],/ ,'g')`  
としました。

このときカンマだけにマッチさせたいので、最初の文字だけマッチさせるように^をつけました  
`new RegExp(/^,[0-9][0-9],/ ,'g')`

ここで、確認用のプログラム

[code]

    var str = "123,45,67,890,10,";
    console.log("------------\n");
    var matching = str.match(new RegExp(/^,[0-9][0-9],/ ,'g'));
    console.log(matching);
    
[/code]

を走らせたのですが、結果は何もマッチしませんでした。  
そこで、「カンマだけをマッチ」を抜きして

[code]

    var str = "123,45,67,890,10,";
    console.log("------------\n");
    var matching = str.match(new RegExp(/,[0-9][0-9],/ ,'g'));
    console.log(matching);
    
[/code]

を走らせた結果、 ,45, と ,10, が結果として帰ってきましましたが、 ,67 はマッチしませんでした。これは 123/,45,/67,
と文字列が区切られてしまい、67 がマッチングしなかったためであることは理解しています。

私はこの67をマッチングさせる方法と、カンマだけをマッチさせる方法が知りたいです。


CC BY-SA 4.0
2018-06-16T14:55:02.353
44813
2018-06-18T01:00:17.173
2018-06-18T01:00:17.173
3060
28974
question
javascript 正規表現
カンマで区切られた「2桁の数字」にマッチする正規表現について


先読みする必要があると思います。  
`,(?=\d{2},)`  
→後ろに「数字2桁とカンマ」がくる場合のカンマ

,67をマッチさせたい場合は  
`,\d{2}(?=,)`


CC BY-SA 4.0
2018-06-16T15:40:23.767
44815
2018-06-16T15:40:23.767
28970
44813
answer


2つ目のカンマを「消費」してしまっていることが問題ですので、[先読み](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#special-
lookahead)を使って

[code]

    ,[0-9][0-9](?=,)
    
[/code]

のように書くことができます。

ちなみに`^`は文字列の先頭にマッチするので`^,[0-9][0-9],`という正規表現は、文字列の先頭のカンマ→数字→数字→カンマという部分文字列にマッチします。


CC BY-SA 4.0
2018-06-16T15:47:53.667
44816
2018-06-16T15:47:53.667
13199
44813
answer