Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

正規表現を使った処理で、いい感じの場所に区切り文字を入れる

$
0
0

モチベ

繋がってしまった文字列でいい感じのところに区切り文字を入れたいことってありますよね(?)
自分の場合は繋がってしまった時間帯の表記を、1区間ごとにカンマで区切りたいなーっていうタイミングがありました。
処理前 13:00~15:0017:00~22:309:00~23:00
処理後 13:00~15:00,17:00~22:30,9:00~23:00

区切りたいところに特定の文字があれば、JSだったらreplace()とかsplit()を使って簡単に区切り文字を入れ替えたり、配列にしたりできます。

まず思いついた方法

今回の場合、上記なような考え方ができないため他の方法をとる必要がありました。
3つ以上数字が並んでいる場所の2文字目のあとに、カンマを入れるという感じでいけそうです。
最初に書いたコードがこちらです。

// timeDurations → "13:00~15:0017:00~22:309:00~23:00"functionformatTimeDurations(timeDurations){letarray=timeDurations.split(/[0-9]{3,4}/g)if(array.length<2)returntimeDurationsletbridgeArray=timeDurations.match(/[0-9]{3,4}/g)letformatted=""for(leti=0;i<bridgeArray.length;++i){formatted+=array[i]formatted+=bridgeArray[i].substring(0,2)+','+bridgeArray[i].substring(2)}formatted+=array[array.length-1]returnformatted}// formatted → "13:00~15:00,17:00~22:30,9:00~23:00"

細かい説明は省きますが、先述したように3つ以上数字が並んでいる場所の2文字目のあとに、カンマを入れるという処理をしています。

正規表現をもっと上手に使った方法

上記の処理でも十分良かったのですが、正規表現についてさらに調べているとさらにいい方法があることに気がつきました。
正規表現を()で囲むとその正規表現に該当する文字列をグループ化して、変数のように再利用することができます。

functionformatDurations(durations){returndurations.replace(/([0-9]{2})([0-9]+)/g,'$1,$2')}

ここでは、数字が3つ以上連続しているところから、最初の2つを$1、その後に続くものを$2として、"$1,$2"を表示するという処理をしています。

参考にさせていただいたサイト

正規表現チートシート的な
該当文字列を用いた置換


Viewing all articles
Browse latest Browse all 8691

Trending Articles