匿名質問者

javascriptの正規表現について質問です。

あるサイトのHTML文章全文から、タグに含まれていない文字列の中の特定の文字を検出して、置き換えたいのですが、なかなかうまくいかずに苦労しております。
<タグ1>ここにある文字列の中の一部<タグ2>ここにも文字列があったりします。</タグ2>こんなところにも文字列はあります</タグ1>

上記の場合、たとえば「文字列」という文字とマッチさせて入れ替えたいのです。
「文字列」は例えばmojiという変数にて指定し、これをhemojiという変数にて置き換える作業を全文に施したいのです。
どなたか、教えてください。正規表現、毎回苦闘しております。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/13 12:32:10

ベストアンサー

匿名回答3号 No.1

こういう場合、無理に正規表現一発と考えず、「[<>]」でsplitしてforかreduceで復元しながら内部フラグでタグ内外判断したらどうでしょうか。

他2件のコメントを見る
匿名質問者

ありがとうございます。
こういう書き方があるんですね。
正規表現をモノにしたら、いろいろ便利なんですが、難しいです。
=の使い方を知りませんでいた。
ありがとうございます。勉強になりました。

2014/04/13 12:32:03
匿名質問者

追伸;
この場合、全文から、まず改行を削除してしまい、そのあとにこのマッチを行えば例外処理も必要なさそうです。
改行を放置すると、万が一、class名などにマッチさせる文字列が使われていて、<>の途中で改行を行うような、変なHTMLだった場合、思わぬマッチングがされてしまうようですので。
これで、めどが立ちました。
ありがとうございました。先読みの x(?=)という書式も覚えました。

2014/04/13 13:23:59
  • 匿名回答1号
    匿名回答1号 2014/04/08 10:52:47
    >タグに含まれていない文字列
     
     htmlタグやbodyタグは無視するということですよね? ということは逆に言うとbody要素の子であるテキストノードだということでいいでしょうか。
     一応、HTMLの仕様ですと、body要素の中にインライン要素を置いてはいけないので通常なんらかのタグの中にあると思うのですが、問題ありませんか?
  • 匿名質問者
    匿名質問者 2014/04/08 20:58:10
    はい。そういうことですが、getElementsByTag~などのjavascriptのコマンドは使えません。
    単純に、テキストの中がHTMLの形式で書かれていて、その中でタグとタグに囲まれた文字列の中から、任意の文字列を置き換えたいのです。

    <タグ1>ここにある文字列の中の一部<タグ2>ここにも文字列があったりします。</タグ2>こんなところにも文字列はあります</タグ1>

    上記の例のように、「文字列」の部分がそれに当たります。
    タグの中というのは<>の中ということです。
  • 匿名回答2号
    匿名回答2号 2014/04/08 23:40:17
    今ひとつ、何がやりたいのか。何で困っているのか見えてきません。
    その例だと、単純に「文字列」を任意の文字に置き換えれば目的は達成されると思うのですが。
  • 匿名質問者
    匿名質問者 2014/04/09 01:31:07
    <dsds1文字列>csどこkそdkf<fsds>
    こういうケースを避けたいわけです。

    わかりませんか?
    わかりにくい説明でしょうか。すいません。
    でも、何度も書いてますが、例を見ていただけば、わかると思うのですが。
    文字列が、ここでは「文字列」ですがdivだったりhrefなんてケースも考えられます。
    また、#や=かもしれません。
    そうなると、単純にこのテキストから文字列を置き換えれば済む問題ではないのです。
    わかっていただけますか?

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

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

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

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