JavaScript正規表現 ~漫画で分かるJavaScriptプログラミング講座~

正規表現とは、文字を検索、置換するためのルールのこと。

表現方法の仕方:
文字列オブジェクト . replace( / 検索文字列 / フラグ , 置換する文字列 )

悩んだところ

  1. var a = “mn abcd aBCd aXYd mn”;
  2. var res = a.match(/a(.)(.)d/i);
  3. if (res !== null) {
  4. document.write(“入力文字列 : ” + res.input + “<br>”);
  5. document.write(“一致位置 : ” + res.index + “<br>”);
  6. document.write(“結果格納数 : ” + res.length + “<br>”);
  7.  
  8. // 0は一致した文字列全体、1以降は丸括弧の中身
  9. for (var i = 0; i < res.length; i ++) {
  10. document.write(“結果” + i + ” : ” + res[i] + “<br>”);
  11. }
  12. }

【結果】

入力文字列 : mn abcd aBCd aXYd mn
一致位置 : 3
結果格納数 : 3
結果0 : abcd
結果1 : b
結果2 : c

まず、matchメソッドについて

書き方意味
文字列.match(正規表現)文字列の『一致した部分の情報』、もしくは『null』を返す
文字列.search(正規表現)文字列の『一致した位置』、もしくは『-1』を返す

解説
正規表現の検索方法になる。
1、は文字列が変数aに入っている。
2、はaがオブジェクト、matchがメソッドで()内が正規表現となる。
中身は、フラグがiなので、大文字、小文字区別しない

フラグ説明
g全部を置換する
(gがなければ最初の1つのみを置換)
i英語の大文字、小文字を区別せずに扱う
(iがなければ区別する)
m文頭『^』や文末『$』の一致処理を、各行の行頭や行末にも適用する
(mがなければ、文頭『^』や文末『$』は文字列の先頭と末尾のみに適

3、if (res !== null){~}では、検索した結果一致するものがなければnullを表示する。
4~6、res.input , res.index , res.lengthについては

res.input入力文字列
res.index一致の位置
res.length結果格納数
res[0]
res[1]
res[2]
:
一致の全体
最初の丸括弧の中身
次の丸括弧の中身
:

である。

4~6についてわからなかったところ。
順番的にまず、 var a = “mn abcd aBCd aXYd mn”;の文字列がある。
次に、var res = a.match(/a(.)(.)d/i);より、
変数resにmatchメソッドで変数a(文字列が格納されている)を検索した結果が入る。

matchメソッドの()の中は、
エスケープ(”/”はエスケープという)の間には検索文字列が入る。
その中身はというと、 (/a(.)(.)d/i) より、aとdの2つに挟まれている、丸括弧2つは、任意の1文字が入る 。
この意味は、最初のaと最後のdに挟まれた文字列を探し出す。→a●●d(●は任意の1文字)
つまり、変数aには”mn abcd aBCd aXYd mn”の文字列が入っているので、一致するのはmnスペースの次の「abcd」になる。
次に、(.)(.)の任意の位置文字にはb,cが入っているため、一致する値はb,cとなる。

この結果をresに代入するのだが、matchメソッドは配列で返すため[abcd , b , c]となる!!

※4~6について…matchメソッドの返り値は、色々な設定(プロパティ)を持っているので、.input , .index , .length 等 その情報を引き出すのに変数resに入っている値( var res = a.match(/a(.)(.)d/i); のこと)のinput情報、index情報、length情報を取り出し、document.writeで書き出しているだけのこと!!←ここ大事!!!!!

4、 document.write(“入力文字列 : ” + res.input + “<br>”);
一番最初のres.input(入力文字列を呼び出すプロパティ)は、resの中身は配列の[abcd,b,c]が格納されている。が、入力文字列なので “mn abcd aBCd aXYd mn”; が表示される。

5、document.write(“一致位置 : ” + res.index + “<br>”);
a=”mn abcd aBC aXYd mn”;
—–0123456789…←左から何番目が一致した位置なのか(indexの値:3 aが左から3番目スペースも数に入れる!!)


6、document.write(“結果格納数 : ” + res.length + “<br>”);
一致したらフラグにgがないので (var res = a.match(/a(.)(.)d/i);←この部分) 、一致した部分の最初の1つのみの情報を取り出す。→(この時点で、abcdにだけフォーカスする)
また、
matchの戻り値は配列であることから…
document.write(“結果格納数 : ” + res.length + “<br>”);
のres.lengthより、変数resには先ほどの[abcd,c,d]が格納されているので、結果は3になる。





※matchの戻り値は配列!! 通常の配列にinputm,indexというプロパティがついている。

もりけん塾
もりけん先生ブログ

コメント