とほほのJavaScript入門(正規表現)

とほほのWWW入門 > とほほのJavaScript入門 > 正規表現
1998年2月15日版

正規表現(RegExp)

RegExp(patern[, flag]) (e4/N4)
正規表現オブジェクトを生成する。 正規表現オブジェクトは、文字列のパターンマッチングを行う際に用いられる。 次の例は、文字列 str が "DEF" という文字列を含んでいるかどうかを検査する。
    str = "ABCDEFG";
    re = new RegExp("DEF", "i");
    if (str.search(re) != -1) {
        document.write("Match!!");
    }
通常は次のように簡単に記述する。
    str = "ABCDEF";
    if (str.search(/DEF/i) != -1) {
        document.write("Match!!");
    }
正規表現では、次のようなマッチングが行われる。
    A           Aという文字
    ABC         ABCという文字列
    [ABC]       A,B.Cのいずれか1文字
    [A-C]       A〜Cまでのいずれか1文字
    [^ABC]      A,B,Cのいずれでもない任意の1文字
    .           任意の1文字
    A+          1文字以上のA
    A*          0文字以上のA
    A?          0文字または1文字のA
    ^ABC        ABCで始まる文字列
    ABC$        ABCで終わる文字列
    ABC|DEF|GHI ABCまたはDEFまたはGHI
    \+や\*      +や*
    A{2}        2個のA(AA)
    A{2,}       2個以上のA(AA, AAA, AAAA, ...)
    A{2,3}      2個〜3個のA(AA, AAA)
    [\b]        バックスペース
    \b          スペースなどの単語の区切り
    \B          \b以外の文字
    \cA         Ctrl-A
    \d          任意の数値([0-9]と同じ)
    \D          数値以外の文字([^0-9]と同じ)
    \f          フォームフィード文字
    \n          改行文字
    \r          復帰文字
    \s          1文字の区切り文字([ \f\n\r\t\v])
    \S          \s以外の1文字
    \t          タブ文字
    \v          垂直タブ文字
    \w          英数文字([A-Za-z0-9_]と同じ)
    \W          \w以外の文字
    \2          2番目の(...)にマッチした文字列
    \o033       8進数で033の文字
    \x1b        16進数で1bの文字

/.../i と指定すると大文字小文字を区別しなくなる。

    document.write("AbCdEfG".match(/abc/i)); // abc
/.../g と指定すると最初にマッチした部分に加え、2番目、3番目...にマッチした部分も配列として返す。
    xx = "12:34:56".match(/\d+/g);
    document.write(xx.length + "<BR>); // → 3
    document.write(xx[0] + "<BR>); // → "12"
    document.write(xx[1] + "<BR>); // → "34"
    document.write(xx[2] + "<BR>); // → "56"
(...)を指定すると、後でその(...)に対応する部分を取り出すことができる。
    xx = "12:34:56".match(/(\d+):(\d+):(\d+)/);
    document.write(RegExp.$1 + "<BR>") // → 12
    document.write(RegExp.$2 + "<BR>") // → 34
    document.write(RegExp.$3 + "<BR>") // → 56
$1, $2, ..., $9は str.replace()の第2引数でも使用することができる。
    str = "12:34";
    str.replace(/(\d+):(\d+)/, "$1時$2分");
    document.write(str);

regexp (e4/N4)
re = new RegExp("[a-z]+"); によって生成される正規表現オブジェクト。 単に re = /[a-z]+/; としてもよい。

regexp.ignoreCase (e4/N4)
iフラグ(/.../i)が指定されていればtrue。

regexp.global (e4/N4)
gフラグ(/.../g)が指定されていればtrue。

regexp.source (e3/N4)
正規表現部分。/.../の...部分。

regexp.lastIndex (e4/N4)
次のマッチングを開始すべきインデックス。
    re = /\d+/g;
    for (i = 0; i < 3; i++) {
        xx = re("12:34:56");
        document.write(re.lastIndex + ":");
        documenr.write(xx + "<BR>");
    }

RegExp.lastMatch (e4/N4)
最後にマッチした文字列。

RegExp.leftContext (e4/N4)
マッチした部分より左側の文字列。

RegExp.rightContext (e4/N4)
マッチした部分より右側の文字列。

RegExp.lastParen (e4/N4)
最後の(...)に対応する文字列。

RegExp.$n (e4/N4)
直前の正規表現マッチングにおける、n番目の(...)に対応する文字列。
    "12:34:56".match(/(\d+):(\d+):(\d+)/);
    document.write(RegExp.$1 + "<BR>");
    document.write(RegExp.$2 + "<BR>");
    document.write(RegExp.$3 + "<BR>");

regexp.compile(patern[, flag]) (e4/N4)
高速化のために正規表現を内部表現形式にコンパイルする。 ループの中でマッチングを行う際に有力。
    re = new RegExp("");
    re.compile("[0-9]+");
    document.write("12:34:56".match(re));

regexp.exec(str) (e4/N4)
str.match(regexp)と同様。

regexp.test(str) (e4/N4)
strregexpがマッチしたかどうかをtrue|falseで返す。

regexp(str) (e4/N4)
regexp.test(regexp)と同様。

regans (e4/N4)
マッチングの結果。

regans.length (e4/N4)
配列の要素の個数。

regans[n] (e4/N4)
配列の各要素。

regans.index (e4/N4)
文字列中のマッチングのインデックス。

regans.input (e4/N4)
マッチングの対象となった文字列。

Copyright (C) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwjsreg.htm