数値を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- ラブじゃん マホちゃんの必殺技完成! スクウェア・エニックス スクウェア・エニックス 2010-01-29 |