下記の例文中の最初と最後の「はてな」だけにマッチするJavaScriptでの正規表現を教えてください。

「<A〜>.....</A>」以外の「はてな」にマッチする正規表現を求めております。

-----例文ここから-----
このサイトははてなという。今日もこの<A href="http://www.hatena.ne.jp/" title="はてな">はてな</A>を利用した。明日もはてなを使うだろう。
-----例文ここまで-----

よろしくお願いします。

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

回答2件)

id:icchan0000 No.1

回答回数85ベストアンサー獲得回数5

ポイント35pt

>「<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>を空文字列に置換して、それから「はてな」をマッチングしています。

id:worldtravel

すいません。

こちらの説明が足りませんでした。

一致した部分を、部分的に置き換えたいので削除はしないで下さい。

該当した部分をはてなと言うようにし、その他は変わらないようにしたいのです。

こんな感じです

tmp = text.replace(/正規表現/ig,"$1");

これだと<A〜>...</a>間も変換してしまうので

こんな感じだと思うのですが...

tmp = text.replace(/(正規表現)(はてな)(正規表現)/ig,"$1$2$3");

「(はてな)」の前後の正規表現がわかりません。

色々試しても思い通りに動作してくれないのでこの部分をよろしくお願いします。

2006/05/31 11:13:57
id:bonlife No.2

回答回数421ベストアンサー獲得回数75

ポイント35pt

万能ではありませんが、以下のようなやり方ではどうでしょうか。

  1. 全ての「はてな」の前後にSTRONGタグを付与
  2. 不要部分のSTRONGタグを削除
// 全ての「はてな」の前後に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などでループをまわして削除することも可能です。

全てを完璧にするサンプルが書けなかったので、シンプルな回答にいたしました。

想定されるデータに応じて適宜修正してみてください。

参考になれば幸いです。

id:worldtravel

ありがとうございます。

なるほど、複数回に分けるのですね。

しかし、かなり状況が限られてしまうので他の回答も待ちたいと思います。

2006/06/01 10:27:02

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

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

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

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

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