←前  最新記事  次→

便利だけど難しい「正規表現」

IT業界の方はご存知と思いますが、文字列を効率よく操作する技術として「正規表現」というものがあります。

例えば、
・文字列中に「fairy」という文字が含まれているかどうかを調べたい。
・文字列中の「fairy」という文字をすべて「Fairy」に置き換えたい。
・文字列中の「fairy」で始まる単語(fairyland、fairytaleなど)の頭文字を大文字「F」に統一したい。
といったニーズに、非常に簡単に応えられます。

ただし、その記述方法がちょっと覚えにくいので、いざ使いたいと思ってもなかなか思うように実現できず苦労してしまいます。

※写真は先日立ち寄った喫茶店ですが、特に記事とは関係ありません
20091003160730.jpg

今日も、ちょっとした文字列操作に正規表現を使おうと思って調べているうちに、あっと言う間に長時間を浪費してしまいました。
というわけで、以下に技術メモを。

【JavaScriptで、文字列の一括置換をする例】
var str1; // もとの文字列
var str2; // 変換後の文字列
str2 = str1.replace(/\sid=\"(.+?)\"/g, ' class="$1"');

【補足説明】
replace(reg, str) → 第1引数が正規表現、第2引数が置換文字列

【上記正規表現で使っているマッチング表現】
(円記号がバックスラッシュで表示されているかもしれません)
\s:空白
\":ダブルクォーテーション
. :任意の文字
+ :1文字以上
? :最小幅で一致させる
() :取り出す文字列部分。順に$1、$2...として取得可能
g :マッチした文字列をすべて対象とする

20091003161013.jpg

【文字列チェックの正規表現例】
英字 /^[a-zA-Z_]+$/
英数字 /^[a-zA-Z0-9_]+$/
メールアドレス /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,4}$/
URL /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i
IPアドレス /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/