Javascriptで特殊文字を置換する方法

このQ&Aのポイント
  • Javascriptで文字列の置換をする方法について教えてください。
  • Perlで作成したHTMLとJavascriptにおいて、文字列置換がうまくできません。
  • 特殊文字「$」を置換する際にエスケープ文字を除いた場合はうまくいくが、Perlの出力で問題が発生します。解決策を知っている方、教えてください。
回答を見る
  • ベストアンサー

Javascriptで特殊文字を置換する方法

表題の件で分からず教えてください。 PerlでHTMLとJavascript(HTML埋め込み)を作成しています。 Javascript(On Click)で、文字列を置換させたいのですが、うまくできません。 (最終的にやりたいことはTextAreaに埋め込んだタグ付き文章を「プレビューする」ようなイメージです) ■置換前の文字列 $body$ ■置換後の文字列 任意の文字列(タグを含む) ネットで調べたところ次の方法でできるようだったので試しましたが、できませんでした。 var rgexp = new RegExp("\$body\$", "g"); str = frm.preview.value.replace(rgexp, "■■■"); 「$」とエスケープ文字をはずすとうまくいくので、多分「$」で失敗しているのだと思いますが 解決が分かりません。 ※エスケープをはずすとPerlの出力時に怒られてしまいます お分かりになる方いらっしゃいましたらお願いします。

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.1

Perlは触ったことがないので間違ってるかもしれませんが PerlからHTMLが作られる際にエスケープ処理がすでに行われてしまい リプレースの時点ではエスケープ文字がなくなっているのではないかと思います。 var rgexp = new RegExp("\\$body\\$", "g"); とエスケープ文字をさらにエスケープしてみてください。

Azzz___
質問者

お礼

ありがとうございます。お二方の回答でうまくいきました。 しかしながらduronさんのお答で解決できましたのでBAにさせて頂きます。

その他の回答 (1)

回答No.2

Perlからの出力ですか? Perlの記述 #ダブルクォーテーションの場合 print "var rgexp = new RegExp(\"\$body\\\\\$\", \"g\");\n"; #シングルクォーテーションの場合 print 'var rgexp = new RegExp("$body\\\\$", "g");' , "\n"; 出力例 (これをブラウザでアクセスしてソースコードを見ると、以下のようになっていると思います。) var rgexp = new RegExp("$body\\$", "g"); ヒアドキュメント等を使っている場合は、出力例のようになるようにPerlの記述を調整してください。 -------------- ・Perlでは$は「変数」を意味しますので、$という文字を出力するためにエスケープが必要です。 ・正規表現の最後に現れる$記号は「$という文字」ではなく、「データの最後」を意味しますので、$文字にするためにエスケープが必要です。 ・RegExp()に文字列を渡すとき、文字列から正規表現への変換でエスケープ記号が1つ使われます。  ( RegExp("\\$") が変換されて /\$/ となります。)

Azzz___
質問者

お礼

回答ありがとうございます。 talooさんが直接の回答になりますが、先に回答頂いた件でこちらでもいろいろ試してできました。 最終的には「\\\\\$left\\\\\$」な感じでできました。 またよろしくお願いいたします。

関連するQ&A

  • Javascriptでの正しい文字置換方法

    Javascriptのサンプルなどで置換処理は A→Bの置換を行う場合 文字列をAで配列に分割してそれをB区切りに連結するという方法を使っているのを見かけるのですが納得いきません。 Perlで書いた場合、こんな感じの処理ですね。 $str = join("B",split(/A/, $str)); もう少し正直に $str =~ s/A/B/g; に該当するような正しい記述は無いものでしょうか?

  • JavaScriptでメタ文字エスケープ

    JavaScriptで?や|などのメタ文字をエスケープするために\をつけるよう変換したいのですが、?を置換する場合replaceを使って\?にできたのですが例えば????や|||など連続させると\????と最初だけエスケープされます。これを\?\?\?\?のように変換するにはどうすればよいのでしょうか?また\のエスケープ方法なんかも教えてください。 説明が変で申し訳ありませんが、なかなか上手く変換できず困っています。 PS カテゴリが違いますがJavaScriptでなく、Perlで簡単に可能な場合はPerlでのやり方などもぜひご教授ください。 お願い致します。

  • Perlでの文字列置換に関して

    Perlでの文字列置換についてうかがいます。 文字列中からHTMLタグを排除しようと思うのですが、 タグ部分のみをうまく指定することができず、困っています。 どうか御知恵をお貸し下さい。

    • ベストアンサー
    • Perl
  • Perlの文字列置換について

    Perlで文字列置換の業務をすることになりした。 Struts1からStruts2のJSPのタグの変換です。 (1)html:textarea property="aaa" styleClass="bbb" (2)s:textarea name="aaa" cssClass="bbb" (1)から(2)に変換したいです。 「html:textarea」が「s:textarea」に対応しており、その属性の「property="aaa"」が「name="aaa"」に対応、 「styleClass="bbb"」が「cssClass="bbb"」に対応するといった内容です。 aaaとbbbは任意の文字列 if ($str =~ /html:textarea/ ) { $str =~ s/html:textarea/s:textarea/; $str =~ s/property=\"(.+)\"/name="$1"/; $str =~ s/styleClass=\(.+)"\"/cssClass/; というように参考書を元に作成してみたのですが、変換は行われるものの、属性のpropertyとstyleClassの順番が逆だったり、ここに記載していない他の属性を間に入れたりすると変換ができません。 どなたか教えて下さい。

    • ベストアンサー
    • Perl
  • replaceによる置換がうまくいかない

    Javascriptを使用して、一回で全てのタグの中身を、それぞれで置き換えるような処理を考えています。 例えばですが、 <data> <item list="りんご,みかん,なし">果物</item> <item list="あじ,さんま,まぐろ">魚類</item> <item list="とり,ぶた,うし">肉類</item> </data> を下のように置換することは可能でしょうか? <data> <item list1="りんご" list2="みかん" list3="なし">果物</item> <item list1="あじ" list2="さんま" list3="まぐろ">魚類</item> <item list1="とり" list2="ぶた" list3="うし">肉類</item> </data> if, match, replaceを使って、strに元の文字列が入っているとして、 if (str.match(/<item list=\"([^<]+)\">[^<]+<\/item>/)) { food = RegExp.$1.split(","); str = str.replace(/<item list=\"[^<]+\">[^<]+<\/item>/, "<item list1=" + food[0] + …); } としてみたのですが、当然ながら全てのitemタグの中身がりんご、みかん、なしに置換されてしまいます。 一列ずつ置換する方法はありますか?一列といっても元の文字列は改行がない場合を考えています。 よろしくご教示ください。お願いいたします。

  • 文字列のアスタリスク置換

    PHP4でDBはMySQLを使用しています。 DBから取り出したいろいろな長さの文字列を*に置換したいのですがどのようにしたら良いでしょうか。 str_replaceを用いて置換をしようとしていますが文字列長が一定でないため難しいです。 宜しくお願い致します

    • ベストアンサー
    • PHP
  • JavaScriptの正規表現/?<.+?>/について

    strからHTMLのタグを取り除いた文字列をxにしまうため var x=str.replace(/<.+?>/g,""); を使うそうですが /<.+?>/g をなぜ使うのかが分かりません /<.+>/g がまずいのは分かりますが・・・・ 教えていただければ幸いです

  • 正規表現を使った置換処理。大文字の直前に「_」を入れたい

    正規表現を使った置換処理です。 大文字の直前に「_」を入れたいと思っています。 例:htmlLinkStr → html_Link_Str WSHとして以下のようなコードを1行記述しました。 WScript.Echo("htmlLinkStr".replace(/([A-Z]+)/g, "_" + RegExp.$1)); しかし「html_ink_tr」としょぼい結果しかえられません。 「RegExp.$1」の使い方が悪いのかもしれません…。 ちなみにVBSでは以下のコードで成功しています。 ので大きくはずしてはいないと思うのですが… Set regEx = New RegExp regEx.Pattern = "([A-Z]+)" regEx.Global = True MsgBox regEx.Replace("htmlLinkStr", "_$1") JavaScriptでの正規表現の使い方に詳しい方よろしくお願いします。

  • ヒットする初回のみ置換する方法

    あいうえおかきくけこあいうえおあいうえお という文字列があった時、 初回の「あいうえお」のみ空に置換して かきくけこあいうえおあいうえお としたいのですが、str_replace()だと全部置換されてしまいますし、 preg_replace()やmb_ereg_replace()ではうまく置換されません。 対象とする文字列は、実際はHTMLタグやマルチバイトが混じっています。 置換するべき文字列は、全く同様のものが対象文字列内にも必ず含まれています。 preg_replace()やmb_ereg_replace()でも可能なのかもしれませんが、 どうやればいいのか分かりませんでした。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • 変数内のURL文字列を置換させたい

    変数に格納した文字列のうち、URLを以下のようにして 置換しようとしましたが、置換されませんでした。 $html = str_replace("www.sample.com/hoge", "hoge.hogeoge.net", $html); str_replace の使い方が間違っているのでしょうか。 どうぞ宜しくお願い申し上げます。

    • ベストアンサー
    • PHP