• ベストアンサー

正規表現

if(str.match(/^[-+]?\d+$/)) alert("matched !"); この正規表現(先頭に+か-かをつけてあとは数字という表現です。)で 全体が//で囲まれてますがどうしてでしょうか? オプションとしてgとかiがあるのならわかるのですがないみたいです。 また^と$をつかった表現で例えば^AB$とした場合どうしてACBは含まれないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.4

2 番目のやつは、match メソッドの中で文字列を自動的に RegExp オブジェクトに変換してくれるということです。 もちろんすべてのメソッドで文字列を RegExp に自動的に変換してくれるわけではありませんが、match や replace などのメソッドは自動的に変換してくれます。 単に "" で囲んだだけではそれはただの文字列でしかありません。正規表現検索をするには、最終的にはどこかで RegExp オブジェクトが作られるということになります。その RegExp オブジェクトの作り方がいろいろある、ということです。 \ が二つあるのは、それが文字列の中だからですね。 "" で囲んだ文字列の中には、文字列を構成する文字として " や \ を直接書くことができないので、\" や \\ と書く必要があります。(一度文字列として解釈された後に正規表現として解釈されるということ) // で囲んだ場合はそのまま正規表現として解釈されるので \ はそのまま \ と書くのですが、逆に / を \/ に書き換えないといけません。

shoshosho
質問者

お礼

再度の回答ありがとうございました^^ 詳しい説明で大分理解できました。 特定ののメソッドだけが変換してくれるということですね。 \の説明もありがとうございました。

その他の回答 (3)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

簡単に言うと、 /正規表現/ は new RegExp("正規表現") を省略した書き方です。 > それに//がついてないものもありますし、必ずついているっていうわけでもなさそうですし・・。いまいち違いがわからないです。 // で囲ってあるのとないのとではぜんぜん違います。 // で囲まないとただの式とみなされます。 正規表現を使った検索にはいろいろやり方があります。以下の三つはすべて同じ結果になります。 if (str.match(/^[-+]?\d+$/)) alert("matched !"); if (str.match("^[-+]?\\d+$")) alert("matched !"); if (str.match(new RegExp("^[-+]?\\d+$"))) alert("matched !"); match メソッドの引数には正規表現を表す文字列をそのまま指定してもいいし、RegExp オブジェクトを指定することもできます。 RegExp オブジェクトを作成するには、単に正規表現を // で囲ってもいいし、new RegExp("正規表現文字列") でもいけます。 ただし、文字列の中に正規表現を書く場合はバックスラッシュの扱いなどに注意が必要です。

shoshosho
質問者

お礼

ご回答ありがとうございます^^ なるほど結局は//はnew RegExpの省略した書き方なんですね。 詳しく回答していただきありがとうございます。 3つの式のうち1番目と3番目はわかるのですが2番目の式は オブジェクトも指定していないし//で囲ってあるわけでもないし どうして正規表現が使えるのでしょうか? (ただの式と//で囲んだ正規表現の違いがわかっていないのかもしれないです。) また\が2つあるというのもちょっとわからないで教えていただけると うれしいです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1> #1でRegexと書いているのは、記憶違いで、ご指摘の通りRegExpオブジェクトの間違いでした。すみません。 >正規表現のオブジェクトになるというのがいまいちピンとこないですTT Javascript 1.2から導入されたリテラル形式です。自動的にRegExpオブジェクトが生成されます。 >^は先頭、$は末尾だから間に何か入っていてもいいのでは?と思ったのですが >違うんですね。 違います。 ABの間に0文字以上の文字を挟む場合は A.*Bとします。 ^$は、先頭と末尾を表すのであって、その間に挟まる物とかは、意味しません。

shoshosho
質問者

お礼

再度の回答ありがとうございます! RegExpが自動的にできるということがよくわかりました。^$の間にはなにもないということも再確認できました。 初歩的な質問につきあっていただいて感謝しています。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

//で囲んだものはRegexオブジェクト(正規表現のオブジェクト)になります。 オプションとして、g や i は使えます。 ^AB$は、AとBの間に文字がはいる余地はありません。

shoshosho
質問者

お礼

ご回答ありがとうございます^^ 正規表現のオブジェクトになるというのがいまいちピンとこないですTT オブジェクトを作成するにはnew RegExp()をつかわなければならないと思ってました。 それに//がついてないものもありますし、必ずついているっていうわけでもなさそうですし・・。いまいち違いがわからないです。 ^は先頭、$は末尾だから間に何か入っていてもいいのでは?と思ったのですが 違うんですね。

関連するQ&A