正規表現を使いこなす

(x) の使い方

「(x)」は、正規表現 x をグループ化します。
グループ化することで正規表現の中に別の表現を組み込むことができ、パターンが見やすくなります。

「(T|t)he」」で検索すると、「The」でも「the」でもマッチングします。
// 検索対象文字列
var str1 = "The earth";
var str2 = "the earth";
// 検索実行および結果出力
document.write("「The earth」からの抽出結果: ", str1.match(/(T|t)he/));
document.write("<br>「the earth」からの抽出結果: ", str2.match(/(T|t)he/));
実行結果:


参考:match()メソッドの戻り値にはグループとしてマッチした部分文字列も出力されます。
    ここでは、「T」、「t」がそれです。

グループ化された正規表現は、「後方参照」といってマッチした部分文字列を、同一の正規表現パターンに組み、参照することができます。
参照は「\」の後に整数を付けて「\1」として記述します。グループが複数ある場合は、順に「\2」、「\3」・・・として参照できます。
「abCdefGhiJabcdefg」という文字列から、最初の大文字から、大文字の次の小文字が次に出現するまでをマッチングするために、「[A-Z]([a-z]).*\1」で検索すると・・・
// 検索対象文字列
var str = "abCdefGhiJabcdefg";
// 検索実行および結果出力
document.write("検索結果: ", str.search(/[A-Z]([a-z]).*\1/));
document.write("<br>抽出結果: ", str.match(/[A-Z]([a-z]).*\1/));
document.write("<br>置換結果: ", str.replace(/[A-Z]([a-z]).*\1/, "zzz"));
実行結果:


また、グループでマッチングした文字列は検索実行後も記憶されています。
これを参照するには、JavaScriptの場合「RegExp.$1」で取り出せます。(Perl では $1 だけで良い。)
グループが複数ある場合は、「RegExp.$2」、「RegExp.$3」・・・とすれば、順次参照できます。。
// 検索対象文字列
var str = "TAG12345";
// 検索実行および結果出力
document.write("検索結果: ", str.search(/([A-Z])+([0-9]+)/));
document.write("<br>抽出結果: ", str.match(/([A-Z]+)([0-9]+)/));
document.write("<br>置換結果: ", str.replace(/([A-Z]+)([0-9]+)/, "tag" + RegExp.$2));
document.write("<br>RegExp.$1: ", RegExp.$1);
document.write("<br>RegExp.$2: ", RegExp.$2);
実行結果:


戻る