JavaScriptで正規表現のグループ化を使って、複数マッチした文字列を加工して値を返す方法

JavaScriptで特定の文字列を正規表現を使ってマッチングして、マッチした文字列を置換するためにはreplaceを使っています。

例えば下のような感じですね。

文字列を置換する

let str = 'SFV';
let newstr = string.replace(/SFV/, 'Street Fighter V');

console.log(newstr); //コンソールに「Street Fighter V」と出力される

ところで、以下のようにアルファベットと数字が混ざっている文字列があったとします。

アルファベットと数字が混ざっている文字列

abc12345def

上の文字列を正規表現を使って「アルファベットと数字に並び替えて、JSONでパースするための文字列として加工したい」とします。

文字列をこう加工したい

{"alphabet":"abcdef", "number":12345}

上のようなことをするには、replaceの第2引数に関数を指定して、マッチした文字列を加工して値を返せばOKです。

というわけで、codepenでサンプルを作りました。

JavaScript

//置換用の関数
function replacer(match, p1, p2, p3, offset, string) {
 //p1 abc
 //p2 12345
 //p3 def
 return '{"alphabet":"' + p1 + p3 + '",' + '"number":' + p2 + '}';
}

let str = 'abc12345def'; //文字列
let newstr = str.replace(/^(\D+)(\d+)(\D+)$/, replacer); //正規表現のグループ化を使ってマッチング

console.log(newstr); //コンソールに「{"alphabet":"abcdef","number":12345}」と出力される

文字列「abc12345def」に対して、正規表現のグループ化を使ってマッチングした際に「replacer」が実行されて、各グループでマッチした文字列を使って加工して値を返しています。

replaceの詳細についてはString.prototype.replace() – JavaScript | MDNをご参考ください。

著者:bouya Imamura