mozilla
Your Search Results

    RegExp.prototype.exec()

    概要

    特定の文字列でのマッチのための検索を実行します。結果の配列、あるいは、null が返ります。

    RegExp のメソッド
    実装されたバージョン: JavaScript 1.2, NES3.0
    ECMA バージョン: ECMA-262, Edition 3

    構文

    var result1 = regexp.exec(str);
    

    引数

    regexp
    正規表現の名前。変数名かリテラル。
    str
    正規表現にマッチするかどうかの対象となる文字列。

    説明

    マッチが成功した場合、 exec メソッドは、配列を返し、正規表現オブジェクトのプロパティを更新します。 マッチが失敗した場合は、exec メソッドは null を返します。

    単に、マッチが真か偽かを調べたい場合は、test メソッド か、String の search メソッドを使ってください。

    次の例を考えてください。

    // 1 つの d 、それに続く、1 つ以上の b 、それに続く、1 つの d にマッチします。
    // b のマッチとそれに続く d のマッチをそれぞれ覚えておきます。
    // 大文字、小文字を無視します。
     var myRe = /d(b+)(d)/ig;
     var myArray = myRe.exec("cdbBdbsbz");
    

    このスクリプトの結果は以下の表の通りです。

    オブジェクト プロパティ / 配列番号 説明
    myArray   myArray の内容 ["dbBd", "bB", "d"]
    index 文字列のマッチの 0 ベースの位置【訳注: 0 は、 /^/ でマッチする、文字列の開始位置】 1
    input 元の文字列。 cdbBdbsbz
    [0] 最後にマッチした文字 dbBd
    [1], ...[ n ] 括弧で囲まれた部分文字列のマッチ。括弧で囲まれた部分文字列の数に制限はありません。 [1] = bB
    [2] = d
    myRe lastIndex 次のマッチが始まる位置。 5
    ignoreCase 大文字小文字を区別しない、"i" フラグが指定されているかどうか。 true
    global グローバルマッチのための、"g" フラグが指定されているかどうか。 true
    multiline 複数行に渡って文字列を検索する、"m" フラグが指定されているかどうか。 false
    source パターンのテキスト。 d(b+)(d)

    正規表現で "g" フラグを使用する場合、同じ文字列で成功するマッチを見つけるために exec メソッドを複数回使うことができます。そのときの検索は、正規表現の lastIndex プロパティで指定された、str の部分文字列から開始されます。例えば、このスクリプトで考えてみてください。

    var myRe=/ab*/g;
    var str = "abbcdefabh";
    var myArray;
    while ((myArray = myRe.exec(str)) !== null) {
     var msg = myArray[0] + " を見つけました。";
      msg += "次のマッチは " + myRe.lastIndex + " からです。";
      console.log(msg);
    }
    

    このスクリプトは以下のテキストを表示します。

    abb を見つけました。次のマッチは 3 からです。
    ab を見つけました。次のマッチは 9 からです。
    

    例: exec の使用

    以下の例では、ユーザは名前を入力し、スクリプトが入力に対してのマッチを実行します。その処理は、配列によって、他の名前がユーザの名前にマッチするかわかるまで、繰り返されます。

    このスクリプトは、パーティデータベースから集められたであろう、登録されたパーティの出席者のファーストネームが配列 A にあらかじめ読み込まれていることを仮定しています。

    var A = ["Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick",
          "Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick",
          "Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"];
    
    function lookup(input) {
       var firstName = /\w+/i.exec(input.value);
       if (!firstName){
          console.log (input.value + " isn't a name!");
          return;
       }
      var count = 0;
      for (var i = 0; i < A.length; i++){
        if (firstName[0].toLowerCase() == A[i].toLowerCase())
          count++;
      }
      var midstring = count == 1
                    ? " other has "
                    : " others have ";
      console.log("Thanks, " + count + midstring + "the same name!");
    }
    

    ドキュメントのタグと貢献者

    Contributors to this page: Potappo, dextra, ethertank, teoli, Mgjbot
    最終更新者: teoli,