• ベストアンサー

正規表現で

"aa 11y 333".replace(/(?:^\d*|\W+\d*)(y)(?:\W+|$)/, "b"); とすると、"aab333"になってしまうのですが、 "y"だけを置換して"aa 11b 333"のようにするにはどうすればよいでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

見たところ、置換する 'y' を保存しておく必要はないように思えます。 yの後も先読みを使えばこれも保存の必要がなくなりますので、 var str = "aa 11y 333".replace(/((?:^|\W)\d*)y(?=\W|$)/, "$1b"); print(str); 結果: aa 11b 333 こういう書き方もあります。 #yに先行する文字列の条件もちょっといじりました。

KanjiTalk
質問者

お礼

なるほど!仕様書でちょっと見かけたのですが、難しそうだったのでよく調べませんでした、 これから勉強してみます。ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

たんにyをbに変えるだけでは? <script> str="aa 11y 333"; str=str.replace(/y/, "b"); document.write(str) </script>

KanjiTalk
質問者

補足

いいえ、色々条件があるので...。 説明不足ですみません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"); ↑な感じでいけると思います.

KanjiTalk
質問者

お礼

早速のご回答ありがとうございます。 replaceメソッドのはたらき方をよく理解できていませんでした。

関連するQ&A