JavaScript プログラミング入門 2006/11/10 神津
3-7-1 正規表現の基礎知識 正規表現とメタキャラクタ ^JavaScript 「^」は「行の先頭」を表す Java ?Script 3-7-1 正規表現の基礎知識 正規表現とメタキャラクタ ^JavaScript 「^」は「行の先頭」を表す Java ?Script 「?」は「直前の文字の0回もしくは1回の繰り返し」を表す 「JavaScript」 と 「Java Script」の両方を検索できる
3-7-1 正規表現の基礎知識 正規表現オブジェクトの生成 正規表現を利用するには、「正規表現オブジェクト」として 生成しておく必要がある 3-7-1 正規表現の基礎知識 正規表現オブジェクトの生成 正規表現を利用するには、「正規表現オブジェクト」として 生成しておく必要がある var regexp = new RegExp(“^JavaScript”); var regexp = /^JavaScript/; testメソッド 書式 : 正規表現オブジェクト.test(str) 引数 : str(検索対象の文字列) 戻り値: マッチした結果(true or false)
3-7-1 正規表現の基礎知識 var regeret = /^JavaScript/; 3-7-1 正規表現の基礎知識 var regeret = /^JavaScript/; var str = “JavaScript 入門”; var result = regexp.test(str); var result = /^JavaScript/.test(“JavaScript 入門”); var result = new RegExp(“^JavaScript”).test(“JavaScript 入門”);
3-7-1 正規表現の基礎知識 正規表現オブジェクトのオプション i : 大文字・小文字を区別しない g : 全てを検索する 3-7-1 正規表現の基礎知識 正規表現オブジェクトのオプション i : 大文字・小文字を区別しない g : 全てを検索する RegExpコンストラクタの2番目の引数として指定 var regexp1 = new RegExp(“java”,”1”); もしくは var regexp1 = / java / i; 正規表現によるパターンマッチは最初にマッチした時点で 終了するが、gオプションを指定すると最後まで行われる
3-7-2 Stringオブジェクトのメソッドでパターンマッチング matchメソッド 書式 : 文字列.match(regexp) 引数 : regexp(正規表現オブジェクト) 戻り値: マッチした文字列 var regeret = /^JavaScript/; var str = “JavaScript 入門”; var result = str.match(regexp); var result = “JavaScript 入門”.match(/^JavaScript/); 変数result にはマッチした文字列「JavaScript」が格納される
3-7-2 Stringオブジェクトのメソッドでパターンマッチング searchメソッド 書式 : 文字列.search(regexp) 引数 : regexp(正規表現オブジェクト) 戻り値: マッチした文字列の位置 指定したregexpがマッチすれば、マッチした文字列の 先頭からの位置(先頭を「0」とする番号)を戻す みつからなかった場合は「-1」を戻す パターンマッチの実験用のスクリプト
3-7-3 さまざまなメタキャラクタ ^ : 行の先頭にマッチ $ : 行の終わりにマッチ . : 任意の1文字にマッチ 3-7-3 さまざまなメタキャラクタ ^ : 行の先頭にマッチ $ : 行の終わりにマッチ . : 任意の1文字にマッチ ? : 直前の文字の0回もしくは1回の繰り返しにマッチ * : 直前の文字の0回以上の繰り返しのマッチ + : 直前の文字の1回以上の繰り返しのマッチ \d : 数字にマッチ \D : 数字以外にマッチ \s : 空白文字にマッチ \S : 空白文字以外にマッチ \w : 英文字とアンダーバー「_」にマッチ \W : 英文字とアンダーバー「_」以外にマッチ \b : 単語の区切りにマッチ
3-7-3 さまざまなメタキャラクタ 繰り返しの指定について 「*」と「+」の違い Ja*va 3-7-3 さまざまなメタキャラクタ 繰り返しの指定について 「*」と「+」の違い Ja*va この場合、「Java」や「Jaaaaava」だけでなく「Jva」もマッチ Ja+va この場合は「Jva」はマッチしない
3-7-3 さまざまなメタキャラクタ 文字クラス 「Java」「cava」「sava」のすべてにマッチさせたい場合 3-7-3 さまざまなメタキャラクタ 文字クラス 「Java」「cava」「sava」のすべてにマッチさせたい場合 「 [ 」と「 ] 」の間にマッチさせたい文字の並びを記述 [jcs]ava 文字コードが連続した一連の文字にマッチさせたい場合 [a-z] 他の例 [a-zA-z] : アルファベットすべて [a-zA-z0-9_] : 英数字と「_」(\wと同じ) [^a-zA-z0-9_] : 英数字と「_」以外(\Wと同じ)
3-7-3 さまざまなメタキャラクタ メタキャラクタの働きを打ち消すには (メタキャラクタを文字としてパターンに含めたい場合) 3-7-3 さまざまなメタキャラクタ メタキャラクタの働きを打ち消すには (メタキャラクタを文字としてパターンに含めたい場合) メタキャラクタの前に「\」を記述する 「$450」を検索したいとき \$450 「\」そのものを表すには、「\\」と記述。
3-7-4 正規表現による文字列の置換 replaceメソッド 書式 : 文字列.replace(regexp , str) 3-7-4 正規表現による文字列の置換 replaceメソッド 書式 : 文字列.replace(regexp , str) 引数 : regexp(正規表現オブジェクト) str(文字列) 戻り値: 置換後の文字列 regexpとマッチした部分えおstrに置換する パターンマッチの実験用のスクリプト
3-7-4 正規表現による文字列の置換 パターンマッチは欲張り <h1>セミナーのお知らせ</h1> 3-7-4 正規表現による文字列の置換 パターンマッチは欲張り <h1>セミナーのお知らせ</h1> <h2>場所:第2会議室</h2> HTMLのタグは「<」と「>」で囲まれた文字列 タグを消すため、マッチさせるには普通に考えると <.+> しかし、できるだけ多くの文字列を含めようとするため、 最初の「<」から最後の「>」も間の文字列にマッチしてしまう それぞれのタグにマッチさせたい場合、つまり最短でマッチ させたい場合には以下のように記述 <.+?>
3-7-5 マッチした文字列を後から使うには パターンの一部を「(」と「)」で囲んでグループ化しておくことで 3-7-5 マッチした文字列を後から使うには パターンの一部を「(」と「)」で囲んでグループ化しておくことで マッチした文字列を後から使うことができる マッチした文字列はRegExpオブジェクトのスタティック変数 「$1」、「$2」、「$3」...に順に格納されていく 例(メールアドレスから名前とドメイン名を取り出す) var youMail = “makoto@peachpress.co.jp”; var mailRegexp = /^([\w\.-]+)@([\w\.-]+)$/; if(yourMail.macth(mailRegexp)){ doucument.write(“<p>名前:”,RegExp.$1,”</p>”); doucument.write(“<p>ドメイン:”,RegExp.$2,”</p>”); } else{ alert(“メールアドレスが正しくありません”);
3-7-5 マッチした文字列を後から使うには Replaceメソッドの第2引数でマッチした文字列を使う 3-7-5 マッチした文字列を後から使うには Replaceメソッドの第2引数でマッチした文字列を使う グループにマッチした文字列はreplaceメソッドの第2引数 で使うことができる この場合、「RegExp.$1」の「RegExp」を省略して「$1」と 記述することができる 例(カンマ「,」で区切られた2つの単語を入れ替える) var str = “Java,Script”; var regexp = /(\w+),(\w+)/; var newStr = str.replace(regexp,”$2,$1”); newStrには「Script,Java」が格納される
宿題 Removeボタンを押すと指定文字列1の文字列を削除 replaceボタンを押すと指定文字列1の文字列を 指定文字列2の文字列に置換する