JavaScriptの正規表現のメモ。
正規表現の前にJavaScriptの文字列のエスケープシーケンスのメモ。
特殊文字はエスケープシーケンスで表す。エスケープシーケンスの始まりを表す文字をエスケープ文字という。JavaScriptのエスケープ文字はバックスラッシュ(\)。
エスケープシーケンス以外の\は無視される(例 \a は 単にa, \c は 単にc)[1]。
\b バックスペース \t (水平)タブ \n ラインフィード・改行(New Line) \v 垂直タブ \f ホームフィード \r キャリッジリターン \\ バックスラッシュ \' シングルクォート \" ダブルクォート
\b, \v, \f, \rは使う場面が思い浮かばなかったのでほかのエスケープシーケンスだけを試す。
<form> <textarea id="tarea"></textarea> </form>
var text; text = 'abc\n'; // 改行の例 text += '\tdef'; // タブの例 タブのエスケープシーケンス\tに続けてdef text += '\n\\jkl'; // バックスラッシュ\自体をエスケープ text += '\n\'mno'; // 'クォート text += '\n\"pqr'; // '文字列では"はエスケープの必要ないがしても問題はない。 text += '\n\x61'; // Latan- 1のコードポイント a text += '\n\u0061'; // Unicodeのa // text += 'stu\'; // 構文エラー $('#tarea').val(text);
正規表現オブジェクト(RegExpオブジェクト)は2通りの方法で生成できる。
var text = '\t123'; // 特殊文字タブ123 // 正規表現\sは空白を表す。 var pettern1 = '\s.+'; // \sはJavaScript文字列のエスケープシーケンスではないので単にs 。 // console.log(pettern1) // pettern1の文字列はs.+ var regexp1 = new RegExp(pettern1); // s.+の正規表現オブジェクト作成 console.log(text.match(regexp1)); // null マッチ失敗 var pettern2 = '\\s.+'; // \\はバックスラッシュのエスケープシーケンスなのでpettern2は\s.+ // console.log(pettern2); // \s.+ var regexp2 = new RegExp(pettern2); // \s.+の正規表現オブジェクト作成 console.log(text.match(regexp2)); // [" 123"] var pettern3 = '\t.+'; // \tはエスケープシーケンス。特殊文字タブ.+ var regexp3 = new RegExp(pettern3); // 特殊文字タブ.+の正規表現オブジェクト作成 console.log(text.match(regexp3)); // [" 123"] var pettern4 = '\\t.+'; // \t.+ var regexp4 = new RegExp(pettern4); // \t.+の正規表現オブジェクト作成 console.log(text.match(regexp4)); // [" 123"] // 正規表現の\tとJavaScript文字列のエスケープシーケンス\tはたまたま同じなので\tと\\tは同じ結果になる // 改行を表す\nも同様の動作 var pettern5 = '\d.+'; // d.+ var regexp5 = new RegExp(pettern5); // d.+の正規表現オブジェクト作成 console.log(text.match(regexp5)); // null マッチ失敗 var pettern6 = '\\d.+'; // \d.+ var regexp6 = new RegExp(pettern6); // \d.+の正規表現オブジェクト作成 console.log(text.match(regexp6)); // ["123"]
正規表現リテラル(//)は直接RegExpオブジェクトを生成するので\をエスケープしない。
var pettern7 = /\d.+/; // \d.+ console.log(text.match(pettern7)); // ["123"] var pettern8 = /\\d.+/; // \\d.+ console.log(text.match(pettern8)); // null マッチ失敗
[1] \が単独で使われたり文字列の末尾に置かれると構文エラー(unterminated string literal)
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。