「<A〜>.....</A>」以外の「はてな」にマッチする正規表現を求めております。
-----例文ここから-----
このサイトははてなという。今日もこの<A href="http://www.hatena.ne.jp/" title="はてな">はてな</A>を利用した。明日もはてなを使うだろう。
-----例文ここまで-----
よろしくお願いします。
>「<A〜>.....</a>」以外の「はてな」にマッチ
とのことですので、与えられた文字列から、まず<A~>...</a>」部分を取り除いたらいいんじゃないかと思います。
検証精度を高めるためちょっと例文を変更しました。
var tmp = 'このサイトははてなという。今日もこの<A href="http://www.hatena.ne.jp/" title="はてな">はてな</A>を利用した。はてなっていいな。昨日はこの<A href="http://www.hatena.ne.jp/" title="はてな">はてな</A>を利用しなかった。明日もはてなを使うだろう。'; tmp = tmp.replace(/<a.*?\/a>/ig,""); ・・・(1) tmp = tmp.match(/はてな/g);・・・(2)
(1)で、<A~>...</a>を空文字列に置換して、それから「はてな」をマッチングしています。
万能ではありませんが、以下のようなやり方ではどうでしょうか。
// 全ての「はてな」の前後にSTRONGタグを付与 str2 = str.replace(/(はてな)/ig,'<strong>$1</strong>'); // タグの属性として指定されている「はてな」の前後のSTRONGタグを削除 str2 = str2.replace(/(<a)(.*?")(<strong>)(.*?)(<\/strong>)(".*?>)/ig,'$1$2$4$6'); // Aタグに挟まれた「はてな」の前後のSTRONGタグを削除 str2 = str2.replace(/(<a.*?>)(.*?)(<strong>)(.*?)(<\/strong>)(.*?)(\/a>)/ig,'$1$2$4$6$7');
上記のようにすることで変数str2に置換後の値がセットされます。
ただし、1つのAタグの複数の属性に「はてな」が含まれていたり、属性としていする文字列が「はてな」と完全一致しなかったり、属性の前後にダブルクォートがなかったりすると正しく動作しません。
また、Aタグで挟まれる文字列の中に「はてな」が複数個含まれる場合、上記のサンプルでは2つ目以降の「はてな」の前後のSTRONGタグは削除できません。
whileなどでループをまわして削除することも可能です。
全てを完璧にするサンプルが書けなかったので、シンプルな回答にいたしました。
想定されるデータに応じて適宜修正してみてください。
参考になれば幸いです。
ありがとうございます。
なるほど、複数回に分けるのですね。
しかし、かなり状況が限られてしまうので他の回答も待ちたいと思います。
すいません。
こちらの説明が足りませんでした。
一致した部分を、部分的に置き換えたいので削除はしないで下さい。
該当した部分をはてなと言うようにし、その他は変わらないようにしたいのです。
こんな感じです
tmp = text.replace(/正規表現/ig,"$1");
これだと<A〜>...</a>間も変換してしまうので
こんな感じだと思うのですが...
tmp = text.replace(/(正規表現)(はてな)(正規表現)/ig,"$1$2$3");
「(はてな)」の前後の正規表現がわかりません。
色々試しても思い通りに動作してくれないのでこの部分をよろしくお願いします。