chalcedony_htnの日記スマートフォン用の表示で見るchalcedony_htnの日記この広告は、90日以上更新していないブログに表示しています。2009-03-15[JavaScript]String.matchとRegExp.execと後方参照JavaScriptAdobeのサポートデータベース関係のぐりもんを書いたり添削してもらったりした結果、新たに覚えたことがあるので、せっかくだからメモっておきます。Center見れば全部書いてあるので、そっち見たほうがいいと思います。MDCString.matchとRegExp.execString.matchとRegExp.execは、どちらも正規表現を使って文字列のマッチングを行うメソッド。検索を行って、マッチした文字列を得たいときに使う。マッチするかどうか(と、マッチした位置)だけを調べたいときは、余分な処理をしないString.searchまたはRegExp.testを使ったほうが速い。String.match(RegExp)とRegExp.exec(String)は、正規表現にgオプションがついてないときは同じ動作をする。gオプションなしの場合の動作(String.match/RegExp.exec共通)返り値は配列になる。言い方がいろいろあってよくわからない。マッチした文字列の中で、あとから部分的に取り出すことができるように保存する。RegExpのプロパティだと$9までになるけど、この方法だと部分文字列の数に制限はないらしい。マッチする文字列が無かった場合は、nullを返す。今までこういう形で配列に格納されることを知らなかったので、いちいちRegExp.$1にアクセスしてたよ......。"BC"]の配列になる。それぞれマッチング直後のRegExp.$1を調べると、どちらも"A"を返す。1つ目のグループの文字列を得たいときは、match_result[1]/exec_result[1]/RegExp.$1のどれかにアクセスすればおk。この場合は配列を変数に格納してるので、それを使ったほうがいい。gオプションありの場合の動作(String.match)返り値は、マッチしたすべての文字列全体の配列。書くとたいへんわかりづらい......。要するに、部分文字列は配列に含まれないということ。str.match(regexp);マッチするたびに「次の検索開始位置」がregexp.lastIndexに格納され、マッチするものがなくなるまで続く。"IJKL"]の配列になる。部分文字列の保存は行われるので、直後にRegExp.$1を調べると"I"を返す(最後に行われたマッチングの分が格納されている)。同じregexpオブジェクトを使ってマッチングを繰り返した場合、すべて同じ結果になる。0マッチに失敗した場合はnullが返る。gオプションありの場合の動作(Regexp.exec)返り値は、最初にマッチした文字列全体+キャプチャした文字列の配列。設定される(lastIndexプロパティ)。同じオブジェクトでマッチングを繰り返すと、そのたびに返り値は変わる。12lastIndexだけ更新して、あとはgフラグないときと同じように動くって考えればいいのかな。マッチに失敗したらlastIndexを0に戻して、nullを返す。これを利用すると、こんな風に処理を繰り返せる。alert(m[2]);}「BC」「FG」「JK」と表示されます。......もうちょっと実用的な例にするべきだった気がする。何が言いたかったかというと、こないだのぐりもんのここの部分(11〜13行目)。最新版じゃないけど気にしない。これはCodeReposの方でdrry氏が書きなおしてくれた部分(の一部)。RegExp.$1;修正版を見たときどうしてこう書けるのかわからなくて、上記のことを調べてやっと理解したのでした。String.matchが「マッチした文字列+キャプチャした文字列」の配列を返すことを利用して、RegExp.$1へのアクセスを省略。加えて、マッチしなかった場合はnullを返すので、文書番号が6桁のパターンに当てはまらなかった場合はその時点で処理を中断する、というやり方。隅っこでこっそりとはいえ、何か書いて人に見てもらえるっていいことだなあというお話でした。10で、正規表現にマッチする文字が連続してるときだけトラッキングを...まさかの2日連続投稿ですが、ただの続きです。ExtendScriptのプリプロセッサディレクティブ月別アーカイブはてなブログをはじめよう!chalcedony_htnさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。