* 正規表現入門 [#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS