先日「http://q.hatena.ne.jp/1149023329」でも質問させていただいたのですが
期待通りの結果を得られなかったので再度質問させてください。
「ここから<A href="x" title="ここを通り">ここを通り</A>ここまで」
を
「<STRONG>ここ</STRONG>から<A href="x" title="ここを通り">ここを通り</A><STRONG>ここ</STRONG>まで」
とするjavascriptで使える正規表現を教えてください。
hoge.replace(/???????/,'???????');
「ここ」を<STRONG>で囲むのですが、<〜> 内や<A〜</A>の間は置き換えない正規表現を望んでいます。
できれば1行で動く書き方を教えてください。
よろしくお願いします。
alert(msg.replace(/(ここ)(?![^<]*<\/a>|[^<]*?>)/gi, "<STRONG>$1</STRONG>"));
よく考えたら、これでいけますね。こんなもんでしょうか。
以下のような感じでどうでしょう?
とりあえずお望みの結果は得られていると思います。
1行ではないかもしれませんが・・・。
var text = 'ここからここを通りここまで';
var res = text.replace(/([^<]+)(<[Aa][^>]+\>[^<]*<\/[Aa]\s*>)?(<[^>]+>)?/g,
function (str, p1, p2, p3, offset, s) {
return p1.replace("ここ","ここ")+(p2?p2:"")+(p3?p3:"");
});
ありがとうございます。
確認なのですがこれは本当にjavascriptで動きますか!?
動きましたか!?
教えていただいたコードの後に「alert(res);」と書いても期待通りの結果が得られないのですが...
msg = 'ここからここ<A href="ここxここ" title="ここを通りここ">ここを通りここ</A>ここまでここ'; alert(msg.replace(/(ここ)(?![^<]*<\/a>|[^"'<]*["'].+?>)/gi, "<STRONG>$1</STRONG>"));
Firefox 1.5.0.4 で確認しました。もっとスマートに書けないかなぁ。
alert(msg.replace(/(ここ)(?![^<]*<\/a>|[^<]*?>)/gi, "<STRONG>$1</STRONG>"));
よく考えたら、これでいけますね。こんなもんでしょうか。
これはいいですね!!
前後を考えなくても後だけ考えれば良いとは...
ありがとうございました。
万一不具合が見つかったら再度質問させていただきます。
これはいいですね!!
前後を考えなくても後だけ考えれば良いとは...
ありがとうございました。
万一不具合が見つかったら再度質問させていただきます。