お世話になります。
下記のコードについて、理解ができない点がございます。
code1>>
result=p.exec(str)
これは、
var p =/http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?/gi;
というコードが実際には
var p = new RegExp(/http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?/gi);
であり、そのインスタンスpがプロトタイプを辿ってexecメソッドを呼び出している
と理解しております。
code2>>
理解ができないのは
document.write(RegExp.leftContext);//code2
です。
⒈まずせっかくpインスタンスを作ったのに、直接RegExpオブジェクトにアクセスするのでしょうか?静的プロパティというのが関連しているというところまで調べることができたのですが、詳しい内容は理解ができませんでした。。
2.実際にはp.leftContextでは正規表現でマッチする前までの文字列は取得できないのですが、インスタンスからこのleftContextプロパティにはアクセスできないのはなぜでしょうか?
3.pインスタンスは/http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?/giというリテラル(引数?情報?)を知っているので、
result=p.exec(str);//code1
document.write(result);
の結果、正規表現にマッチする内容を配列で返してくれるのは非常に理解できるのですが、一方でオブジェクトのRegExpは/http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?/giを知らない(引数?として持っていない)はず、加えてstrについても何も伝達していないはずなのに
document.write(RegExp.leftContext)で
対象の文字列や正規表現を認識しているのはなぜでしょうか?
pで作成するようなインスタンスの場合、元のオブジェクト等に影響を与えないようにインスタンスを作成していると理解しているのですが、なぜまたはどのようにして、インスタンスしか知りえない情報をRegExpオブジェクトは保有(または参照)しているのでしょうか?
また、素人のため、うまく質問できていないかもしれず、申し訳ございませんが、
不明な点からあれば、ご指摘いただければ、補足させていただきます。
よろしくお願い申し上げます。
Javascript
1<script> 2var p =/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/gi; 3var str = "始めはhttp://www.wahaha.mmm.com/です"; 4str +="お次はHTTP://www.aaa-dddd.com/です"; 5result=p.exec(str);//code1 6document.write(result); 7document.write(RegExp.leftContext);//code2 8</script>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/23 13:47