- ベストアンサー
正規表現による日本語の置換
例えば、次の文を実行したとします。 文字列.replace(/ alt=".+?"/ig," alt=\"\""); すると、半角文字のみのalt属性は全て削除されますが、全角文字を含むalt属性は削除されません。 「.」がマルチバイト文字に対応していないためと思われますが、詳しくはわかりません。 原因&解決策を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2ですが document.images[i].setAttribute('alt',''); で <img … ALT="XX" …> の場合、ALTとaltが一致しないので、うまく機能しないようです。 単純に document.images[i].alt=''; とすると、HTMLでの大文字小文字は意識しないですみます
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>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)
IE6及び、Firefox1.5で試してみましたが、 半角文字のみ、全角文字のみ、混在、 どの場合でも大丈夫でした。 javascript1.3以降文字列はユニコードで扱うようになったので、javascriptt1.3以降では問題ないと思います。 おそらく、それ以前の古いブラウザを使用しているからだと思います。 環境がないので試せないですが、 replace(/ alt="[^"]+?"/i," alt=\"\"") ではどうでしょうか?
補足
Firefoxでは上手くいきました。 IE6.0ではダメです。 色々試してみたところ、「文字列」にdocument.body.innerHTMLを使用していることが原因だったようです。普通の文字列は上手くいきました。 innerHTMLはユニコード扱いされないのでしょうか?
補足
「document.images[i].alt='';」これは使えますね。正規表現とは無関係ですが、試してみます。 肝心のinnerHTMLですが、原因がわかりました。 IEに限っては、innerHTMLに代入されるHTMLはソースそのままのHTMLではなく、IEが勝手に解釈したHTML(メニューから保存したソースに見られる汚いHTML)であり、その中で日本語のALTからはなぜかクォーテーションが外されてしまっていたために、サンプルの正規表現にはマッチしていなかったようです。 つまり正規表現自体は正常に動作していたわけで、こちらの早とちりでした。申し訳ありません。 色々アドバイスありがとうございました。