JSのコードから正規表現で式を含んだテンプレート文字列を抜き出す方法
テンプレート文字列が含まれるJSのソースコードで、VSCode等の検索機能を用いて正規表現を使ってテンプレート文字にマッチさせたいです。
今試しているのが
/`[\s\S]*?(?<!(?<!\\)\\)`/
なのですが、この中に${}の式があり、その式の中にテンプレート文字列がある場合、正しくマッチしてくれません。
例えば、
`string1 string2`
なら`string1 string2`でマッチしますが、
`string1 ${`string2`} string3`
だと`string1 ${`までしかマッチしてくれません。
そこで、以下のような正規表現を考えつきました。
/`(?:\$\{.*\}|[\s\S])*?(?<!(?<!\\)\\)`/
これで、
`string1 ${`string2`} string3`
は`string1 ${`string2`} string3`としてマッチしてくれました。
また、
`string1 ${`string2 ${`string3`} string4`} string5`
と、多重ネストでも`string1 ${`string2 ${`string3`} string4`} string5`としてマッチしてくれます。
しかし、これはテンプレートリテラルだけの文字列で検証してるので、例えば
`string1` + `string2`
は`string1`だけにマッチしますが、
`string1 ${`string2`}` + `string3`
としてしまうと、`string1 ${`string2`}`ではなく`string1 ${`string2`}` + `string3`でマッチしてしまいます。
これを`string1 ${`string2`}`のように正しくマッチさせるにはどうすればいいですか?
0 likes