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