晴耕雨読

working in the fields on fine days and reading books on rainy days

正規表現でダブルクオート内の文字列を抽出する

例えば、title: "任意の文字列" から 任意の文字列 を取り出す方法

ケース1: エスケープされたダブルクオートがない場合

この場合は非常に簡単で、「控えめな量指定子」である .*? などを使います。 多くの言語にある正規表現で、これが使えます(使えなかったら済みません)。

var text = 'title: "任意の文字列"';
var m = text.match(/"(.*?)"/);
var result = m && m[1];

ケース2: エスケープされたダブルクオートがある場合

これはどういう状況かというと、例えば title: "今日の \"本のタイトル\" の感想" から 今日の \"本のタイトル\" の感想 を取り出すということです。 この解決方法は 詳説 正規表現 第3版 に載っています。 正規表現 "([^\\"]+|\\.)*" は、正しいダブルクオートにマッチします。

var text = 'title: "今日の \\"本のタイトル\\" の感想"';
var m = text.match(/"((?:[^\\"]+|\\.)*)"/);
var result = m && m[1];