- ベストアンサー
正規表現で
"aa 11y 333".replace(/(?:^\d*|\W+\d*)(y)(?:\W+|$)/, "b"); とすると、"aab333"になってしまうのですが、 "y"だけを置換して"aa 11b 333"のようにするにはどうすればよいでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
見たところ、置換する 'y' を保存しておく必要はないように思えます。 yの後も先読みを使えばこれも保存の必要がなくなりますので、 var str = "aa 11y 333".replace(/((?:^|\W)\d*)y(?=\W|$)/, "$1b"); print(str); 結果: aa 11b 333 こういう書き方もあります。 #yに先行する文字列の条件もちょっといじりました。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.3
たんにyをbに変えるだけでは? <script> str="aa 11y 333"; str=str.replace(/y/, "b"); document.write(str) </script>
質問者
補足
いいえ、色々条件があるので...。 説明不足ですみませんm(__)m
- HIRSYU
- ベストアンサー率51% (45/87)
回答No.1
1つ目の括弧の(?:^\d*|\W+\d*)にマッチした" 11"と、 3つ目の括弧の(?:\W+|$)にマッチした" "を消さない為には、 $1, $2 ... $9を使用するといいです. 詳しい説明は省きますが、 "aa 11y 333".replace(/(^\d*|\W+\d*)(y)(\W+|$)/, "$1b$3"); ↑な感じでいけると思います.
質問者
お礼
早速のご回答ありがとうございます。 replaceメソッドのはたらき方をよく理解できていませんでした。
お礼
なるほど!仕様書でちょっと見かけたのですが、難しそうだったのでよく調べませんでした、 これから勉強してみます。ありがとうございました。