プロが教えるわが家の防犯対策術!

表題の件で分からず教えてください。

PerlでHTMLとJavascript(HTML埋め込み)を作成しています。

Javascript(On Click)で、文字列を置換させたいのですが、うまくできません。
(最終的にやりたいことはTextAreaに埋め込んだタグ付き文章を「プレビューする」ようなイメージです)

■置換前の文字列
$body$

■置換後の文字列
任意の文字列(タグを含む)


ネットで調べたところ次の方法でできるようだったので試しましたが、できませんでした。
var rgexp = new RegExp("\$body\$", "g");
str = frm.preview.value.replace(rgexp, "■■■");

「$」とエスケープ文字をはずすとうまくいくので、多分「$」で失敗しているのだと思いますが
解決が分かりません。
※エスケープをはずすとPerlの出力時に怒られてしまいます

お分かりになる方いらっしゃいましたらお願いします。

A 回答 (2件)

Perlは触ったことがないので間違ってるかもしれませんが


PerlからHTMLが作られる際にエスケープ処理がすでに行われてしまい
リプレースの時点ではエスケープ文字がなくなっているのではないかと思います。

var rgexp = new RegExp("\\$body\\$", "g");

とエスケープ文字をさらにエスケープしてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/18 17:49

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("\\$") が変換されて /\$/ となります。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/18 17:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!