正規表現の「先読み」

Posted 2010年4月16日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

数値を3桁ごとに「,(カンマ)」で区切るのを調べていたら
WadadanetさんのAS3で数字を3桁毎にコンマ区切りにするが見付かり
目的を達することは出来たのですが、構文の中に「?=」や「?:」など意味のわからないものが。

Twitterで質問してみたら正規表現の「先読み」らしいことがわかりました。

大ざっぱに言うと、
マッチングはするけど、カーソルは先読み部分の前で止めちゃうよ
ということなのですね。

そんなわけで自分向けメモ。
javascriptで書くとこんなん。

var maho = "マホは咲の真似してリンシャンあがった";

document.write(
	maho.replace( /(マホは(?=.+あがった)咲の真似して)/, "$1カンして" )
);
// 先読みを使った結果
// マホは咲の真似してカンしてリンシャンあがった

document.write(
	maho.replace( /(マホは咲の真似して).+あがった/, "$1カンして" )
);
// 先読みを使わない結果
// マホは咲の真似してカンして

先読みを使うと「あがった」の部分までマッチングするけど、
その直前までしか「$1」で取得してません。

従来の方法だと「あがった」まで取得してしまうので、
同じように置換すると後半部分が消えてます。

従来方法で同じ結果を出すならこんな感じでしょうか。

document.write(
	maho.replace( /(マホは咲の真似して)(.+あがった)/, "$1カンして$2" )
);
// マホは咲の真似してカンしてリンシャンあがった

これでもいいですが、「リンシャンあがった」の部分になんらかの処理を加えたい時、
カーソルは通り過ぎているのでちょっと面倒なことになります。

咲-Saki- ラブじゃん マホちゃんの必殺技完成! 咲-Saki- ラブじゃん マホちゃんの必殺技完成!
スクウェア・エニックス

スクウェア・エニックス 2010-01-29
売り上げランキング :
おすすめ平均

Amazonで詳しく見る by G-Tools

カテゴリー