文字列の検索5パターン
"検索対象文字列".indexOf("検索語");
indexOf()は正規表現を使わない検索です。
ヒットすれば0以上の数字が返る(最初にヒットした位置)。ヒットしなければ-1が返る
大文字小文字を区別しない検索は、検索対象文字列をあらかじめ小文字に変換しておく方法で
"検索対象文字列".toLowerCase().indexOf("検索語");
"検索対象文字列".search(/正規表現/);
search()は正規表現検索です。indexOf()の正規表現版
ヒットすれば0以上の数字が返る(最初にヒットした位置)。ヒットしなければ-1が返る
- 全文検索の「gスイッチ」はここでは無効です。最初にヒットした時点で終了です
- 大文字小文字を区別しない場合は「iスイッチ」
- 複数行モードを有効にする場合は「mスイッチ」。^が行頭にヒットし、$が行末にヒットするようになる
/正規表現/im
もし正規表現でキャプチャ()したならば、内容は次のように取得できます
RegExp.$1; //1番目のキャプチャ内容 RegExp.$2; //2番目のキャプチャ内容
/正規表現/.test("検索対象文字列");
test()も正規表現検索です。search()と同じようなものです。
ヒットすればtrue、ヒットしなければfalseが返る
"検索対象文字列".match(/正規表現/);
match()も正規表現検索です。
ヒットすれば配列、ヒットしなければnullが返る
配列の中身は全文検索の gスイッチ を付けるかどうかで変化します
戻り値[0] | ヒットした文字列 |
---|---|
戻り値[1]~[n] | 正規表現でキャプチャ()した内容 |
戻り値.index | ヒットした位置(0以上の数字) |
戻り値.input | 検索対象文字列 |
戻り値[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.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 → あいうえお