• ベストアンサー

正規表現で

"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

  • 正規表現での置換えについて

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • VBAの正規表現

    VBAで正規表現による置換をしたいです。 以下のような行が複数あります。 1 aaa bbb ccc ddd 2 aaa bbb ccc ddd 3 aaa bbb ccce ddd 4 aaa bbb eccc ddd ccc の部分のみ置換したいです。 dim hensuu as string dim replace as string replace = eee hensuu = ccc (省略) strPattern = "(\s*)" & hensuu & "(\s+)" rep = RegExpObj.Replace(buf, "\1" & replace & "\2") 行数1,2 のみを置換したのですが、4も置換されてしまいます。 (\s*) の "*" が良くないのは理解していますが、"+" にしてもうまくいきません。 どなたかどのようにしたら1,2のみ置換できるようになるかをご教授お願いできませんでしょうか よろしくお願いいたします。

  • 正規表現のタイプがわからない(初心者)

    正規表現で置換ができることを知り、こういうサイトを見つけました。 @IT:Windows TIPS -- Tips:複数ファイルの文字列置換をワンクリックで行なう http://www.atmarkit.co.jp/fwin2k/win2ktips/308strrpl/strrpl.html そこでreplace.wsfを作りましたが、正規表現がうまくいきません。 replace.wsfは正規表現を使う場合は "/ /g" で囲うらしいのですが urlのようなスラッシュ / が多いものを円記号 \ でエスケープしましたがうまくいきません。 さらに http://msdn.microsoft.com/ja-jp/library/aa293063(VS.71).aspx というサイトで任意の文字をドット . で置換したいんですができません。 以下書いたものを載せます 文字はアンダーバー _ で書いています strRepl="/http:[\/][\/]______.____.jp[\/]____/____[\/][0-9][0-9][0-9][0-9][\/][0-9][0-9][\/][0-9][0-9]/g"; /* 置換対象文字列 */ [\/]はかっこなしでも試しましたができませんでした [0-9]の部分は年月日が入ります。 replace.wsfで正規表現を実現させることができません。 正しい方法を教えてください!!

  • replaceで正規表現を利用したい

    ・置換前文字列 … 9月15日(土)12時16分準備 ・置換後文字列 … 2012-09-15 12:16:00 ■質問1 ・(土)を削除する方法を教えてください ・time = time.replace(/(*)/,"");? ■質問2 ・0がついていなければ、先頭に0を付与する方法は? ■質問3 ・まとめてやる方法はあるでしょうか?  下記みたいにひとつひとつやる方法しか思いつかないのですが…  time = time.replace("準備","");  time = time.replace("月","-");  time = time.replace("日","半角空白");  time = time.replace("時",":");  time = time.replace("分",":00");

  • 正規表現による置換の規則を破っているのでしょうか?

    辞書の訳語を表示する際、正規表現を使って、次の文字列を含む文字列をゴシック表示しようとしています。 そこで次のようにしたのですが、1行目はうまく置換されますが、2行目は全く駄目です。 $yakugo =~ s/(\[再帰\]|\[現分\]|\[代動\]|\[過分\]|\(再\)|\[規則変化\]|\[不規則変化\])/<B>$1<\/B>/g; $yakugo =~ s/(\[\W+と共に\]|\[\W+詞\W+\]|\[次の\W+\]|\[ふつう\W+\])/<B>$1<\/B>/g; 2行目のような置換の仕方は規則破りなのでしょうか?済みませんが、どなたか、これに替わる書法で、2行目のような意図を達成する正規表現の式をお教え下さい。

    • ベストアンサー
    • Perl
  • 正規表現で置換したい

    ブログのシステムを変更して、 記事中にある内部リンクの書き換えが必要となりました。 現在、記事中に post-001.html post-005.html  ・  ・  ・ post-853.html という文字列があります。 数字は飛び飛びでそれぞれ異なり500個ほどあります。 WordPressのプラグインの「Search Regex」を使って置換をしたいのですが、 正規表現で置換して、 ハイフンをアンダーバーに置換し、お尻の「.html」は削除して post_001 post_005  ・  ・  ・ post_853 としたいのですが、正規表現で置換する場合、 どのようにすればいいのでしょうか。 「post-」を ( ) でくくればいいのでしょうか。 「.html」削除するにはどうすればいいのでしょうか。 Search Regex に Search pattern(置換前の文字列)と Replace pattern (置換後も文字列)を入力する欄があります。 上のような文字列を置換したい場合は、 それぞれどのような記号を入力すればよいのでしょうか。 アドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • VB2008 正規表現でHTMLタグを"大文字→小文字"に置換したい

    Visual Basic 2008使用のプログラミング初心者です。 HTMLタグを大文字から小文字に置換するアプリケーションを作成中なのですが記述が間違っているのか、文字列を置換することが出来ません。 以下ソースです。     TextBox1.Text = Regex.Replace(TextBox1.Text, _       "<([\/]?)([\w]+)", _       "$1\L$2") http://dobon.net/vb/dotnet/string/regexreplace.html http://www37.atwiki.jp/emeditor/pages/50.html#id_6996d4b6 この二つのサイトを参考にやってみたのですが 置換を実行すると <BR> → \LBR> こうなってしまいます。 小文字に置換されるようにするにはどこを直せばよいのでしょうか。 教えてください、よろしくお願いします。

  • 正規表現について

    正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。

    • ベストアンサー
    • PHP
  • 秀丸での正規表現での置換方法

    お世話になります。 「\(1)\(2)\(3)\(4)\(5)」と言う文字があります。 置換して 「\(1)\(2)\Y\(3)\(4)\(5)」 にしたいのですが、 検索:「\\(.+)\\(.+)\\(.+)」 置換:「\\\1\\\2\\Y\\\3」 とすると 「\(1)\(2)\(3)\(4)\Y\(5)」 となって、(2)の後ろに入ってくれません。 どのようにすれば(2)の後ろ(2個目のエンマークの後ろ)に 置換することができるのでしょうか? 何卒よろしくお願い致します。

  • この正規表現の意味は?

    あるスクリプトに replace(new RegExp("( ?|^)word\\b"), ""); とありました。この ( ?|^)word\\b の意味がどうしても分かりません。 どんな意味でしょうか?

設定が開かない
このQ&Aのポイント
  • ノートパソコン14型LAVIE N14の設定が開かない問題が発生しています。設定アプリが起動した後、しばらくしてデスクトップに戻ってしまいます。
  • パソコンの容量は1TBなので、容量不足ではないと思われます。トラブルシューティングも試しましたが、異常はありません。
  • Windows11を使用しており、スタート画面やショートカットキーから設定にアクセスしても同様の問題が発生します。再起動しても解決しません。
回答を見る