文字列の検索5パターン

"検索対象文字列".indexOf("検索語");

indexOf()は正規表現を使わない検索です。
ヒットすれば0以上の数字が返る(最初にヒットした位置)。ヒットしなければ-1が返る

大文字小文字を区別しない検索は、検索対象文字列をあらかじめ小文字に変換しておく方法で

"検索対象文字列".toLowerCase().indexOf("検索語");

"検索対象文字列".search(/正規表現/);

search()は正規表現検索です。indexOf()の正規表現版
ヒットすれば0以上の数字が返る(最初にヒットした位置)。ヒットしなければ-1が返る

/正規表現/im

もし正規表現でキャプチャ()したならば、内容は次のように取得できます

RegExp.$1; //1番目のキャプチャ内容
RegExp.$2; //2番目のキャプチャ内容

/正規表現/.test("検索対象文字列");

test()も正規表現検索です。search()と同じようなものです。
ヒットすればtrue、ヒットしなければfalseが返る

"検索対象文字列".match(/正規表現/);

match()も正規表現検索です。
ヒットすれば配列、ヒットしなければnullが返る
配列の中身は全文検索の gスイッチ を付けるかどうかで変化します

gスイッチなしの場合の戻り値
戻り値[0]ヒットした文字列
戻り値[1]~[n]正規表現でキャプチャ()した内容
戻り値.indexヒットした位置(0以上の数字)
戻り値.input検索対象文字列
gスイッチありの場合の戻り値
戻り値[0]1番目にヒットした文字列
戻り値[1]2番目にヒットした文字列
戻り値.lengthヒットした回数

gスイッチありの場合、正規表現でキャプチャ()した内容は「RegExp.$1」「RegExp.$2」のように取得する。
これでは最後にヒットしたものしか取得できないので、必要な場合は次の exec() を使用してください

/正規表現/.exec("検索対象文字列");

exec()も正規表現検索です。
ヒットすれば配列、ヒットしなければnullが返る

戻り値の内容
戻り値[0]ヒットした文字列
戻り値[1]~[n]正規表現でキャプチャ()した内容
戻り値.indexヒットした位置(0以上の数字)
戻り値.input検索対象文字列

これはgスイッチなしのmatch()と同じ内容です。gスイッチがない時はexec()とmatch()は同じ挙動です

exec() に gスイッチ を付けると while で回せるようになります
これでヒット毎にキャプチャ内容を再利用することが可能になります

exec()をwhileで回す
//正規表現は必ず変数に入れること (while()の中に直接記述すると無限ループする)
var 正規表現 = /正規表現/g;

while(正規表現.exec("検索対象文字列")) {
    RegExp.lastMatch; //ヒットした文字列
    RegExp.$1; //キャプチャした1番目の文字列
}

実は exec() に gスイッチ を付けても1回しか検索しませんが、次回実行時は RegExp.lastIndex(次回の検索開始位置) から検索を開始するという性質があるのでループさせることができます。 この性質は test() でも同じです

RegExpプロパティ

RegExpプロパティは正規表現でヒットする度に更新されます

RegExpプロパティ
RegExp.lastMatchヒットした文字列
RegExp.$1正規表現でキャプチャ()した1番目の内容 $1~$9
RegExp.leftContextヒットした文字列より前方にある全ての文字列
RegExp.rightContextヒットした文字列より後方にある全ての文字列
RegExp.indexヒットした位置 (先頭は0から開始)
RegExp.lastIndex次回の検索開始位置。exec()のgスイッチで使用
RegExp.input検索対象文字列
RegExpプロパティ
"あいうえお".search(/う(.)/);

RegExp.lastMatch → うえ
RegExp.$1 → え
RegExp.leftContext → あい
RegExp.rightContext → お
RegExp.index → 2
RegExp.lastIndex → 4
RegExp.input → あいうえお

マニュアルへのリンク