• ベストアンサー

正規表現による日本語の置換

例えば、次の文を実行したとします。 文字列.replace(/ alt=".+?"/ig," alt=\"\""); すると、半角文字のみのalt属性は全て削除されますが、全角文字を含むalt属性は削除されません。 「.」がマルチバイト文字に対応していないためと思われますが、詳しくはわかりません。 原因&解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2ですが document.images[i].setAttribute('alt',''); で <img … ALT="XX" …> の場合、ALTとaltが一致しないので、うまく機能しないようです。 単純に document.images[i].alt=''; とすると、HTMLでの大文字小文字は意識しないですみます

randman
質問者

補足

「document.images[i].alt='';」これは使えますね。正規表現とは無関係ですが、試してみます。 肝心のinnerHTMLですが、原因がわかりました。 IEに限っては、innerHTMLに代入されるHTMLはソースそのままのHTMLではなく、IEが勝手に解釈したHTML(メニューから保存したソースに見られる汚いHTML)であり、その中で日本語のALTからはなぜかクォーテーションが外されてしまっていたために、サンプルの正規表現にはマッチしていなかったようです。 つまり正規表現自体は正常に動作していたわけで、こちらの早とちりでした。申し訳ありません。 色々アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>document.body.innerHTMLを使用していることが原因 経験的に、innerHTMLによるエレメントなどの動的置き換えは、どんな時でもうまくいくというものではないです。 もしやりたいことが、画像の代替テキストを空白にしたいというようなことであれば window.onload=function(){ for(var i=0;i<document.images.length;i++){ document.images[i].setAttribute('alt',''); } }; とすれば、画像の代替テキストを削除(空白に)できます。(バージョンにもよりますが、IE6,Firefoxは、大丈夫) ALTアトリビュートは、img エレメント以外にも使用できる(例えばinputや、appletなど)ので意図していることと違っていたらすみません。 (全てのエレメントからALTがあるかどうかを調べて、あれば空白に置き換えるということもできると思いますが、おそらく、上記で充分ではないかと思います)

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

IE6及び、Firefox1.5で試してみましたが、 半角文字のみ、全角文字のみ、混在、 どの場合でも大丈夫でした。 javascript1.3以降文字列はユニコードで扱うようになったので、javascriptt1.3以降では問題ないと思います。 おそらく、それ以前の古いブラウザを使用しているからだと思います。 環境がないので試せないですが、 replace(/ alt="[^"]+?"/i," alt=\"\"") ではどうでしょうか?

randman
質問者

補足

Firefoxでは上手くいきました。 IE6.0ではダメです。 色々試してみたところ、「文字列」にdocument.body.innerHTMLを使用していることが原因だったようです。普通の文字列は上手くいきました。 innerHTMLはユニコード扱いされないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 日本語を含む正規表現の置換

    日本語を含む文字列が$word1、$word2 があります。 $word1から"(xxx)"というような半角カッコに囲まれた文字を削除したいです。 $word2からは"(xxx)"というような全角カッコに囲まれた文字を削除したいです。 カッコの中の文字xxx(日本語)は不特定です。 $word1は以下のコードで上手くいきました。 $word1=~ s/\(.*?\)//; しかし$word2が上手くいきません。 基本的なことかもしれませんが、 色々やってみても上手くいかないので、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • マイフェスでの「正規表現」置換について

    下記のような文で和文中の数字(年月日以外もあり)のみ全角に変換したいのですが、 (欧文の中の数字は半角のままで) 「旧文字列」と「新文字列」の正規表現の記述はどうすればよいでしょうか。 「November 28,1932,895.63 OR 4/22,Internal 1932年12月15日付」

  • 正規表現:囲われた文字列の置換

    シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。  全角文字のみ  半角文字のみ  全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。

  • VBAで正規表現

    Excel2000-VBAにてマクロ作成中です。 以下のような処理を正規表現を使用して一発で実行させたいのですが、 正規表現に指定するパターンがわかりません・・・。 どなたがご存知でしたら教えて下さい。 やりたいこと:ある文字列中の中のスペース(半角全角両方)を半角スペースに変換し、 さらに連続している半角スペースを1つに置換したい。 スペースを半角に統一することは、Replace関数で可能かと思っています。

  • 正規表現置換

    はじめまして。 現在、テキストエディタで kami987koroです。(漢字、かな、英数字、半角記号、全角記号、改行、スペースを含む文字列)ありがとうございました。 という文字列を正規表現で拾いだして、置換したいと考えています。 ただ、私がその方面の知識に疎く、どう表記すればよいのか分かりません。 そこで、この分野にお詳しい方、ご教授願えませんでしょうか? よろしくお願い致します。

  • 正規表現の置換(EmEditor)

    Fireworksで書きだしたhtmlをEmEditorで修正中です。 name="●●●" を一括削除しようと正規表現を使った置換を試みていますが上手く出来ません。 検索する文字列に入れるサンプル文字を教えて頂けませんか。 ■検索したい文字列例(行頭に半角スペースあり) (半角スペース)name="c123_r4_c6" (半角スペース)name="c123_r5_c5" (半角スペース)name="c123_r6_c4" などです。 全てに共通するものは name=""、c123、_r、_c です。 4、5、6 の位置にある数字は変わります。 ■置換後の文字列 空白 (検索したい文字列の行頭半角スペースも削除) よろしくお願いします。

  • 正規表現で置換したい

    ブログのシステムを変更して、 記事中にある内部リンクの書き換えが必要となりました。 現在、記事中に post-001.html post-005.html  ・  ・  ・ post-853.html という文字列があります。 数字は飛び飛びでそれぞれ異なり500個ほどあります。 WordPressのプラグインの「Search Regex」を使って置換をしたいのですが、 正規表現で置換して、 ハイフンをアンダーバーに置換し、お尻の「.html」は削除して post_001 post_005  ・  ・  ・ post_853 としたいのですが、正規表現で置換する場合、 どのようにすればいいのでしょうか。 「post-」を ( ) でくくればいいのでしょうか。 「.html」削除するにはどうすればいいのでしょうか。 Search Regex に Search pattern(置換前の文字列)と Replace pattern (置換後も文字列)を入力する欄があります。 上のような文字列を置換したい場合は、 それぞれどのような記号を入力すればよいのでしょうか。 アドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 正規表現

    正規表現で次の文字列を認識する方法を教えてください 1. (000) (999) ()でくくられている3桁の数字。カッコを含みます 3桁の数字文字列だけなら'[0-9][0-9][0-9]' ?? 2. [あああ] (あああ) いあああ+ rあああ> 文字列'あああ'の前後の任意の文字、半角、全角両方OKを含む5文字 文字列がカッコの場合もあり

  • replaceで正規表現を利用したい

    ・置換前文字列 … 9月15日(土)12時16分準備 ・置換後文字列 … 2012-09-15 12:16:00 ■質問1 ・(土)を削除する方法を教えてください ・time = time.replace(/(*)/,"");? ■質問2 ・0がついていなければ、先頭に0を付与する方法は? ■質問3 ・まとめてやる方法はあるでしょうか?  下記みたいにひとつひとつやる方法しか思いつかないのですが…  time = time.replace("準備","");  time = time.replace("月","-");  time = time.replace("日","半角空白");  time = time.replace("時",":");  time = time.replace("分",":00");

  • 正規表現を利用した文字列置換

    javaにて、正規表現を利用して、半角・全角スペース、改行のみで形成されている文字列を空文字にしたいのですが、どのような正規表現を作成すればよろしいでしょうか?

    • ベストアンサー
    • Java