正規表現入門

概要・事前準備

  • 主な用途はエラーチェック
  • 今回はJavaScriptを利用

はじめての正規表現

  • 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>

メタ文字

  • []を使った表現
// [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をマッチさせる

<!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"

タグの中身を抽出する

// タイトルタグ
var s = '<title>ドットインストール</title>';
var rs = s.match(/<title>([^<]+)<\/title>/); // 終端の<ではない1文字以上の繰り返し
console.log(RegExp.$1);
"ドットインストール"

日付を変換する

// 日付を日本語表記になおす

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)

  • 置換前文字列
=$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
Last-modified: 2016-06-25 (土) 10:23:09 (874d)