正規表現でダブルクオート内の文字列を抽出する方法について説明します。
例えば、title: "任意の文字列"
から 任意の文字列
を取り出す方法についてです。
(1) エスケープされたダブルクオートがない場合
この場合は非常に簡単で、「控えめな量指定子」である .*?
などを使います。多くの言語では、この正規表現が使えます。
ただし、古い言語や古い正規表現エンジンを使っている場合は、この指定子は存在しません。
let text = 'title: "任意の文字列"';
let m = text.match(/"(.*?)"/);
let result = m && m[1];
控えめな量指定子を使う代わりに、否定の文字集合 [^ ]
を使って中の文字列を抽出することもできます。
let text = 'title: "任意の文字列"';
let m = text.match(/"([^"]*)"/);
let result = m && m[1];
(2) エスケープされたダブルクオートがある場合
例えば title: "今日の \"本のタイトル\" の感想"
から 今日の \"本のタイトル\" の感想
を取り出す方法について説明します。
結論から言うと、正規表現 "([^\\"]+|\\.)*"
を使用します。
let text = 'title: "今日の \\"本のタイトル\\" の感想"';
let m = text.match(/"((?:[^\\"]+|\\.)*)"/);
let result = m && m[1];
以上です。