- 締切済み
RegExp n番目のrightContext
RegExp n番目のrightContext をしたいのですがどう書いたら良いでしょうか。 例えば var hoge = ieobj.document.all(0).innerHTML; hoge.match(/html/igm); var result = RegExp.rightContext; で出力されるresultは最後にhtmlにマッチしたものが出ると思います マッチ対象が複数あった場合指定することは可能でしょうか 実際はエラーになりますが RegExp.$n.rightContext の様な事がやりたいのです
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 4017B
- ベストアンサー率73% (1336/1814)
色々と実験してみましたところ… 修飾子の "g" を付けたら一番最後のマッチング結果、付けない場合は最初のマッチング結果が返されるだけで、PHPやPerlとかの一般的な正規表現マッチとは違いますね…!PHPとかの preg_match_all() とかでマッチさせた場合は結果が配列で戻されて、[$n] みたいに自由に中身を取り出せるのですが。 どうもJavascriptに実装されてる正規表現エンジン自体が貧弱というか、一般的な他プログラム言語のモノとは違って出来ない事がかなり多いみたいなので、"g"修飾子を付けて全てのマッチング結果を返す様に指定しても、その結果を配列として全取得出来る方法は最初の回答例の様な場合のみで、これ少しでも複雑な ()パターンによるマッチングを指定しても無視されてる?みたいな感じの結果しか返してくれませんでした。 なので「"RegExp.rightContext" を使って直前の正規表現マッチング結果の n番目を指定して取り出す事は出来ない」が答えとなりますね…前述の通り、今現在の仕様では正規表現による高度な文字列処理をJavascriptに期待するのは難しい模様。残念! P.S. もしかしたら jQuery でなら自分の知らない高度な正規表現による文字列処理が出来るかも?
- 4017B
- ベストアンサー率73% (1336/1814)
何か書いてある例文の意味がよく分からないのですが… var my_str = 'my age is 24 years old, but my mother is 18 years.', my_exp = /[0-9]+/g, re = my_str.match(my_exp); とりあえず上記の記述例の場合、変数 re の中身は ["24","18"] となり配列として返されます。配列ですので中身を参照したい場合も普通に… alert( re[0] ); ~で「24」と表示されます。re[1] ならば「18」です。何も rightContext とかマニアックな事をしなくても普通に正規表現でマッチさせた結果を取得すればOKだと思います。
お礼
ご回答有難うございます 少し気になったのですが 得たい値はマッチ結果より右の文字列であって マッチする文字列そのものでは無いのですが ご掲示頂いた例で可能でしょうか? 自分が例に出したのは htmlソースで検索かける感じで 挙動としてはgetElementsByName等とほぼ同様です (厳密には違いますが)