* 正規表現入門 [#a7f3600f] #contents ** 概要・事前準備 [#ycaf4020] - 主な用途はエラーチェック - 今回はJavaScriptを利用 ** はじめての正規表現 [#jaa6f0b9] - index.htmlを作成 <!DOCTYPE=html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>正規表現の勉強</title> </head> <body> <script> var s = '@taguchi, @fkoji, @dotinstall'; var rs = s.match(/taguchi/); if (rs) { console.log('マッチしました!'); // Webコンソールに出力 } </script> </body> </html> ** メタ文字 [#u10605e4] - []を使った表現 // [abc] -> abcの任意一文字 // [a-z] -> aからz // [^abc] -> abc以外 - .^Sを使った表現 // . -> 任意の一文字 var rs = s.match(/t.guchi/); var rs = s.match(/t...../); // ^ -> 行頭 var rs = s.match(/^@taguchi/); // $ -> 行末 var rs = s.match(/@dotinstall$/); - {}を使った表現 // {} -> 直前の文字の繰り返す回数 // 0{2} -> 00 // 0{2,} -> 2文字以上 -> 00, 000, 0000000 // 0{2,4} -> 2文字以上4文字以内 -> 00, 000, 0000 // [a-z]{5} -> aからzの5文字 // [a-z]{3,6} -> aからzの3文字以上6文字以内 - ?*+を使った表現 // a? -> 0 or 1 -> , a // a* -> 0 or more -> , a, aaaaa, aaaaaaaaa // a+ -> 1 or more -> a, aaa, aaaaaa, aaaaaaa - ()|を使った表現 // (abc)* -> , abc, abcabc // | -> or // (abc|def) -> abc, def - \に続くメタ文字 // \n -> 改行 // \t -> タブ // \d -> 数字 [0-9] // \w -> 英数字_ [A-Za-z0-9_] // \s -> スペース, タブ // \メタ文字 -> メタ文字をパターンマッチさせたい場合 - フラグについて // フラグ=オプション // i -> 大文字小文字を区別しない var rs = s.match(/taguchi/i); // taguchi, Taguchi, TAGUCHI // g -> すべてのマッチした要素を配列で返す var rs = s.match(/a/g); // m -> 複数行に対応させる -> ^ $ - 最小マッチについて // * + のあとの ? -> 最小マッチをさせる // +? *? var s = 'taguchi@dotinstall.com, fkoji@dotinstall.com, adming@dotinstall.com'; var rs = s.match(/.+@dotinstall.com/); var rs = s.match(/.+?@dotinstall.com/); - キャプチャとRegExp // () RegExp -> マッチした文字列を抽出する時に使用 var s = 'taguchi@dotinstall.com'; var rs = s.match(/(.+?)@dotinstall.com/); console.log(RegExp.$1); // 直前にマッチした括弧内の文字列の1個目を出力 ** ツイッターIDをマッチさせる [#ye1d27c4] <!DOCTYPE=html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>正規表現の勉強</title> </head> <body> <script> // ツイッターID var s = '@taguchi'; var rs = s.match(/(@[A-Za-z0-9_]{1,15})/); console.log(RegExp.$1); </script> </body> </html> "@taguchi" ** タグの中身を抽出する [#f53a2d53] // タイトルタグ var s = '<title>ドットインストール</title>'; var rs = s.match(/<title>([^<]+)<\/title>/); // 終端の<ではない1文字以上の繰り返し console.log(RegExp.$1); "ドットインストール" ** 日付を変換する [#q9759eaa] // 日付を日本語表記になおす var s = '2012-03-24'; // 2012年03月24日 var rs = s.match(/(\d{4})[-\/](\d{2})[-\/](\d{2})/); console.log(RegExp.$1+'年'+RegExp.$2+'月'+RegExp.$3+'日'); "2012年03月24日" ** 文字列置換(Atom) [#fa1ee69e] - 置換前文字列 =$D8+$F8+$H8+$J8+$L8+$N8 =$D19+$F19+$H19+$J19+$L19+$N19 =$D30+$F30+$H30+$J30+$L30+$N30 =$D42+$F42+$H42+$J42+$L42+$N42 =$D43+$F43+$H43+$J43+$L43+$N43 =$D44+$F44+$H44+$J44+$L44+$N44 - 置換後文字列 =$P8+$R8+$T8+$V8+$X8+$Z8 =$P19+$R19+$T19+$V19+$X19+$Z19 =$P30+$R30+$T30+$V30+$X30+$Z30 =$P42+$R42+$T42+$V42+$X42+$Z42 =$P43+$R43+$T43+$V43+$X43+$Z43 =$P44+$R44+$T44+$V44+$X44+$Z44 - 検索対象(Find) ^=\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,})\+\$[a-z]([0-9]{1,}) - 置換文字列(Replace) =$P$1+$R$2+$T$3+$V$4+$X$5+$Z$6