javascriptの正規表現について


以前 http://q.hatena.ne.jp/1150378280 で下記の質問させていただき解決しました。

「ここから<A href="x" title="ここを通り">ここを通り</A>ここまで」を
「<STRONG>ここ</STRONG>から<A href="x" title="ここを通り">ここを通り</A><STRONG>ここ</STRONG>まで」
とするjavascriptで使える正規表現を教えてください。

が、

「ここから<A href="x" title="ここを通り"><B>ここ</B>を通り</A>ここまで」

というように<A〜</A>内に<B>といった他のタグが含まれていると変換してしまい、希望通りの動作になりませんでした。
ですので再度教えてください。

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/09/06 18:16:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:talepanda No.3

回答回数57ベストアンサー獲得回数12

ポイント100pt

要求はわかりました。

#2は少しだけ修正が必要ですね。

alert(s.replace(/(ここ|<a .*?<\/a>)/gi, function(x){return x.match(/^<a .*?<\/a>$/i)?x:"<STRONG>"+x+"</STRONG>";}));

でできませんか?

「ここ」をお好きな文字列に変更して試してみてください。

その他の回答2件)

id:talepanda No.1

回答回数57ベストアンサー獲得回数12

ポイント10pt
var s='ここから<A href="x" title="ここを通り"><B>ここ</B>を通り</A>ここまで';
alert(s.replace(/(ここ)((.*?<a.*?a>)|(.*?))/gi, "<STRONG>$1</STRONG>$2"));
id:worldtravel

ありがとうございます

試したのですが、下記のように文字を変えるとダメでしたので他の方法をお願いします

var s='ここから<A href="x" title="この道を通り"><B>この道</B>を通り</A>ここまで';

alert(s.replace(/(この道)((.*?<a.*?a>)|(.*?))/gi, "<STRONG>$1</STRONG>$2"));

回答を頂いた後ですいませんが

色々な文章で使うので「ここ」だけしか対応できない場合は対象外とさせてください


2の回答へ返信ができないのでこちらへ...

「<A〜>〜〜</A>」以外の部分の任意の文字を置き換えたいのです。


Aタグのhref、title属性部分や、リンクとなるテキスト部分は変換せずに、

その他の部分を変換したいのです。


例の話ですが、<A href="xxxxx" title="●●●">昨日は●●●</A>で、今日は●●●でした。<BR>

明日は●●●でしょう。<BR>


というばあい


例の話ですが、<A href="xxxxx" title="●●●">昨日は●●●</A>で、今日は<STRONG>●●●</STRONG>でした。<BR>

明日は<STRONG>●●●</STRONG>でしょう。<BR>


としたいのです


なぜか返信できないのでこちらへ

遅くなりましてすいません。

色々と試していました。

思い通りの動作をしました。

また、質問するときがありましたよろしくお願いします。

ありがとうございました。

2006/09/06 18:15:34
id:talepanda No.2

回答回数57ベストアンサー獲得回数12

ポイント10pt

要求されることは、~タグに囲まれた以外の任意の文字列をで囲みたい、ということでいいのですか?

チョットずるいけど

var s='ここからここ<A href="x" title="ここを通り"><B>ここ</B>を通り</A>ここまで';
alert(s.replace(/(ここ|<a.*?a>)/gi, function(x){return x=="ここ"?"<STRONG>"+x+"</STRONG>":x;}));

var s='ここから<A href="x" title="この道を通り"><B>この道</B>を通り</A>ここまで';
alert(s.replace(/(この道|<a.*?a>)/gi, function(x){return x=="この道"?"<STRONG>"+x+"</STRONG>":x;}));
id:talepanda No.3

回答回数57ベストアンサー獲得回数12ここでベストアンサー

ポイント100pt

要求はわかりました。

#2は少しだけ修正が必要ですね。

alert(s.replace(/(ここ|<a .*?<\/a>)/gi, function(x){return x.match(/^<a .*?<\/a>$/i)?x:"<STRONG>"+x+"</STRONG>";}));

でできませんか?

「ここ」をお好きな文字列に変更して試してみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません