晴耕雨読

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

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

正規表現でダブルクオート内の文字列を抽出する方法について説明します。

例えば、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];

以上です。

参考文献