人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記の例文中の最初と最後の「はてな」だけにマッチするJavaScriptでの正規表現を教えてください。
「<A〜>.....</A>」以外の「はてな」にマッチする正規表現を求めております。

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

よろしくお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:JavaScript はてな サイト マッチ 正規表現
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● icchan0000
●35ポイント

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

◎質問者からの返答

すいません。

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

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

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

こんな感じです

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

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

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

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

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

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


2 ●
●35ポイント

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

  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などでループをまわして削除することも可能です。

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

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

参考になれば幸いです。

◎質問者からの返答

ありがとうございます。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ