2012年11月27日

CodeStudy 22-8 正規表現のこと

このところしばらく取り組んできた CodeStudy のセクション 22-8 にやっと正解できました。正規表現というのは、名前は聞いたことはありましたが、思っていた以上に複雑で奥が深そうなものでした。

問題
regexp1やregexp2にマッチする様な文字列を、str1とstr2に代入しましょう。


var regexp1 = /\w{3}\s?\d+/;
var regexp2 = /\d{3}-\d{4}\s*\w/;

var str1 = 'aaa 1';
var str2 = '222-1111 a';

var result1 = regexp1.test(str1);
var result2 = regexp2.test(str2);



regexp1 の方の最初の条件は、\w(windowsでは ¥w )です。これは文字を表していますので、文字なら何でもマッチします。僕は a にしました。
次の条件は {3} です。これは この直前の文字を 3つ繰り返すので、さっきの a が aaa になります。
次は、\s¥s)です。これは 空白スペースを表しています。その次に ? がついていますから、空白スペースが 0~1個入っていれば マッチします。ということは  空白スペース無しでもOKです。
次が、\d¥d)です。これは 数字を表しますので、僕は 1にしました。最後に付いている + は直前の文字を 1回以上繰り返す意味ですので、僕は 1回だけにして、

僕は最終的に 'aaa 1' としました。'@@@ 99999' 等でもマッチします。

regexp2 の方でつまずいてしまったのですが、最初の \d{3}¥d{3})は数字を3個繰り返す条件です。
次の - を [-] の記号と勘違いしてしまったのですが、[] に挟まれていない - はこの文字自身を表すだけですので、- が入ります。
次は最初と同じ書き方の数字を4個繰り返す条件です。
次の \s¥s)は空白スペースです。* の記号がついていますから、0個以上繰り返していればマッチします。つまり空白スペース 無しでもOK です。
最後の \w¥w)は文字です後ろに何もついていないので、何の文字が何個ついていてもマッチします。

僕は最終的に '222-1111 a'としました。 '999-0000     zxcvbnm' 等でもマッチします。

正規表現は ここで出題されている以外にも色々あって、ちょっと覚えきれませんが
目標にしている ショッピングサイトを作る時に 商品の発送先などの 入力フォームで 必要になりそうなので、 構文的な所は覚えておいて、条件の書き方は その都度調べながらでもしっかり身につけたい所です。

0 件のコメント:

コメントを投稿