JavaScriptの正規表現
Upcoming SlideShare
Loading in...5
×
 

JavaScriptの正規表現

on

  • 7,090 views

静岡Developers勉強会で発表したJavascriptの正規表現のセッション資料です。

静岡Developers勉強会で発表したJavascriptの正規表現のセッション資料です。

Statistics

Views

Total Views
7,090
Views on SlideShare
3,233
Embed Views
3,857

Actions

Likes
1
Downloads
6
Comments
0

5 Embeds 3,857

http://blogs.wankuma.com 3806
http://www-ig-opensocial.googleusercontent.com 47
https://twitter.com 2
http://translate.googleusercontent.com 1
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

JavaScriptの正規表現 JavaScriptの正規表現 Presentation Transcript

  • 第7章 正規表現やじゅ@静岡Developers勉強会
  •  正規表現の基礎 基礎が分からないと本の内容が理解できない。 正規表現の例 7.1の例題を検証します。 その他 Javascript で正規表現を使うときの補足
  •  正規表現ってなに?正規表現とは、簡単に言えば 検索や置換をより便利にするものです。例えば文章中に 「りんご」 と 「みかん」 を検索したいとき、別々に検索するのは手間だし面倒です。正規表現で検索に使うキーワードを以下のように書くと りんご|みかん「りんご」と「みかん」を同時に検索する事が出来ます。javascript 正規表現 チートシートhttp://visibone.com/products/bbk14-15_850.jpg
  •  「|」を使うと複数キーワードで検索できる ように、下記の特殊文字には役割がある。 ¥ / [ ] - ( ) ? + * | . ^ $正規表現では「メタ文字」と呼んでいる。メタ文字自身を検索対象とする場合、¥を付ける例 ¥¥ ,¥[ , ¥+※メタ(meta-)とは、「高次な-」「超-」「-間の」「-を含んだ」 「-の後ろの」等の意味の接頭辞。ギリシャ語から
  •  「.」 … とにかくなんでもいい1文字(改行以外) 正規表現 み.ん 対象文字 みかん みしん みりん 「^」 … 先頭にマッチ 呼び名:ハット 正規表現 ^みかん 対象文字 みかん みかん みかん 「$」 … 末尾にマッチ 正規表現 みかん$ 対象文字 みかん みかん みかん
  •  「*」 … 直前の文字を0回以上にマッチ 正規表現 おー*い 数量詞表現: おー{0,}い 対象文字 おい おーい おーーい 「+」 … 直前の文字を1回以上にマッチ 正規表現 おー+い 数量詞表現: おー{1,}い 対象文字 おい おーい おーーい 「?」 …直前の文字を0回又は1回にマッチ 正規表現 おー?い 数量詞表現: おー{0,1}い 対象文字 おい おーい おーーい
  •  「.*」 … なんでもいい文字の連続(最長) 正規表現 JR .*駅 対象文字 JR静岡駅から浜松駅まで ※可能な限り合致するまでヒットする 「.*?」 … なんでもいい文字の連続(最短) 正規表現 JR .*?駅 対象文字 JR静岡駅から浜松駅まで ※可能な限り少ない回数でヒットする
  •  「|」… いずれかの文字列 (論理和) 正規表現 みかん|りんご 対象文字 ばなな みかん ぶどう りんご 「()」 … グループ化(先優先) ()を付けた場合の違い 正規表現 私はみかん|りんごが好きです 対象文字 私はみかんが好きです 私はりんごが好きです 正規表現 私は(みかん|りんご)が好きです 対象文字 私はみかんが好きです 私はりんごが好きです
  •  「{}」 … 数量詞 正規表現 w{3} 直前の文字をn回にマッチ 対象文字 www.ora.com/goodparts/ww 正規表現 w{2,} 直前の文字をn回以上にマッチ 対象文字 www.ora.com/goodparts/ww 正規表現 w{0,3} 直前の文字をn回以上、m回以下にマッチ 対象文字 www.ora.com/goodparts/ww 「()」 … グループ化 正規表現 (じゃ)+ーん 正規表現 (じゃ){1,}ーん 数量詞に置き換えた場合 対象文字 じゃーん じゃじゃーん じゃじゃじゃーん
  •  繰り返し回数 正規表現 (みかん){2,4} 対象文字 みかんみかんみかんみかんみかん 指定した回数より多く繰り返している場合には 繰り返し回数の上限までマッチする。 正規表現 (みかん){2,4} 対象文字 みかんみかんみかん 可能な限り多い回数でマッチする。 正規表現 (みかん){2,4} 対象文字 みかんみかんみかんみかんみかんみかん 5個以上は、パターンの繰り返しでマッチする。
  •  「[ ]」 …指定内の任意表現 呼び名:ブラケット 正規表現 今日の天気は[晴曇雨]です 対象文字 今日の天気は晴です 今日の天気は曇です 今日の天気は雨です 今日の天気は雪です 「[^ ]」 …指定内の任意以外表現 正規表現 今日の天気は[^晴曇雨]です (^が先頭) 対象文字 今日の天気は雪です※[ ]の中で ^ が使用された場合は、行の先頭を表す ^(ハット) とは意味が異なります。
  • [ ] と ( | ) の使い方を間違えた場合 例 [りんご|みかん]「り」「ん」「ご」「 | 」「み」「か」「ん」のどれか一文字という意味になる。
  •  「[A - Z]」 … 英大文字AからZまで のどれか 「[a-z]」 … 英小文字aからzまで のどれか 「[0-9]」 … 数字0から9まで のどれか 「[A - Za-z0-9]」 … 上記を連続して書ける 「[あ-お]」 … あぃいぅうぇえぉお のどれか 「[か-こ]」 … かがきぎくぐけげこ のどれか 「[.*]」 … .か * のいずれかの文字。 [ ]の中ではメタ文字は普通の文字として認識 される文字もメタ文字ではない。 (但し、先頭の^や ] や範囲指定の‐は例外)
  •  ¥w 英字、数字、アンダースコア。 [a-zA-Z0-9_] に同じ。 ¥W 英字、数字、アンダースコア以外の文字。 [^a-zA-Z0-9_] に同じ。 ¥d 数字。[0-9] に同じ ¥D 数字以外の文字。[^0-9] に同じ。 ¥n 改行 ¥s スペース。 ¥S スペース以外の文字。
  •  日付を検索する 正規表現 ¥d{4}¥/¥d{1,2}¥/¥d{1,2} 対象文字 2011/08/20 2011/8/2 郵便番号を検索する(厳密ではない) 正規表現 ¥d{3}-¥d{4} 対象文字 012-1234 メールアドレスを検索する (厳密ではない) 正規表現 ^[¥w_-]+@[¥w¥.-]+¥.¥w{2,}$ 対象文字 microsoft@e-mail.microsoft.com
  •  「/g」 … Global 複数回マッチする 正規表現 /みかん/g 対象文字 みかん りんご みかん 「/i」 … Insensitive 大文字小文字を区別しない 正規表現 /ABC/i 対象文字 abcdef 「/m」 … Multiline ^と$が行末記号にマッチ 正規表現 /456/m 対象文字 123¥n456¥n789 ¥n:改行
  • 本の例題var parse_url = /^(?:([A-Za-z]+):)?(¥/{0,3})([0-9.¥-A-Za-z]+)(?::(¥d+))?(?:¥/([^?#]*))?(?:¥?([^#]*))?(?:#(.*))?$/;var url = "http://www.ora.com:80/goodparts?q#fragment";var result =parse_url.exec(url);var names = [url, scheme, slash, host, port, path, query, hash];var blanks = ;var i;for (i = 0; i < names.length; i += 1) { document.writeln(names[i] + : + blanks.substring(names[i].length), result[i]);}
  • http://bit.ly/mZLwEJ コピペ先
  •  url: http://www.ora.com:80/goodparts?q#fragment scheme: http slash: // host: www.ora.com port: 80 path: goodparts query: q hash: fragmentresult[0] には、対象文字列のURLがセット
  •  scheme: http 正規表現 ^(?:([A-Za-z]+):)? 結果 http 「(?:)」… 非キャプチャグループ (…) で囲まれるとキャプチャグループに入る マッチした文字列をコピーし結果の配列に格納 非キャプチャグループはグループ化だけを行う 正規表現 ^(([A-Za-z]+):)? ?:を外す 結果 http: 「:」 が入る
  • str = "http://www.ora.com:80/goodparts?q#fragment";ret = str.match(/^(?:([A-Za-z]+):)?/)alert("1番目:" + ret[0] + "¥n" + "2番目:" + ret[1] + "¥n");
  •  slash: // 正規表現 (¥/{0,3}) 結果 // host: www.ora.com 正規表現 ([0-9.¥-A-Za-z]+) 結果 www.ora.com port: 80 正規表現 (?::(¥d+))? 結果 80
  •  path: goodparts 正規表現 (?:¥/([^?#]*))? 結果 goodparts query: q 正規表現 (?:¥?([^#]*))? 結果 q hash: fragment 正規表現 (?:#(.*))? 結果 fragment
  •  キャプチャxx = “12:34:56”.match(/(¥d+):(¥d+):(¥d+)/);document.write(RegExp.$1 + “<br>”); // → 12document.write(RegExp.$2 + “<br>”); // → 34document.write(RegExp.$3 + “<br>”); // → 56 非キャプチャxx = “12:34:56”.match(/(?:¥d+):(¥d+):(¥d+)/);document.write(RegExp.$1 + “<br>”); // →34document.write(RegExp.$2 + “<br>”); // → 56 肯定先読みalert(“abc”.replace(/ab(?=c)/,“@”)); // → @c 否定先読みalert(“abc”.replace(/ab(?!d)/,“@”)); // → @c
  •  [^ABC]*? … 文字1つ1つ を除外 正規表現 JR[^静岡]*?駅 結果 JR静岡駅 JR浜松駅 JR三島駅 JR岡山駅 これだとJR岡山駅があると対象外となる ((?!ABC).)*? … 文字列 を除外 (?!ABC).*?変更 正規表現 JR((?!静岡).)*?駅 結果 JR静岡駅 JR浜松駅 JR三島駅 JR岡山駅 これだとJR東静岡駅があると対象外となる
  • "abc123def".match(/(123)/);document.write(RegExp.lastMatch + “<br>”); // → 123document.write(RegExp.leftContext + “<br>”); // → abcdocument.write(RegExp.rightContext + “<br>”); // → defdocument.write(RegExp.lastParen + “<br>”); // → 123lastMatch、leftContext、rightContext、lastParen はそれぞれ、$&、$`、$、$+ の省略形を用いることもできます。re = new RegExp("123");"abc123def".match(re);document.write(RegExp.index); // → 3document.write(RegExp.lastIndex); // → 6document.write(re.lastIndex); // → 6
  • ご清聴ありがとうございましたm(_ _)m