• 締切済み

正規表現で一発置き換え

 次のような条件の正規表現を模索中です。 ・対象はHTML文書 ・タグの外側のみ置き換える ・特定タグで囲まれた範囲は置き換え対象外とする  たとえば、   ABCDEF<B>GABC</B>KLM<STARTCOMMENT>ABCDE</ENDCOMMENT>OPQABCDE  という文字列があるとき、replace(/(A|B|C)/, "*") を実行するとします。  すると、   ***DEF<*>G***</*>KLM<ST*RT*OMMENT>***DE</END*OMMENT>OPQ***DE  普通ならこうなってしまいますね。  これを、   ***DEF<B>G***</B>KLM<STARTCOMMENT>ABCDE<ENDCOMMENT>OPQ***DE  こうなるようにしたいのです。  タグは置き換え対象としないという正規表現は実現できたのですが、特定タグで囲まれた範囲を対象外とする記述が思い浮かびません。  なぜなら、「<ENDCOMMENT>のない<STARTCOMMENT>があれば、それ以降を全て置き換え対象外とする」という仕様にしてしまったためです。  なんとか一文でバチッと置き換えるようなものがあれば、ヒントだけでも結構ですのでお教えください。

みんなの回答

  • 665
  • ベストアンサー率72% (18/25)
回答No.1

例えばこんな感じですかね。 string.replace(/<STARTCOMMENT>(.|\n){0,}?<\/ENDCOMMENT>|<\/?[a-zA-Z!][^<>]*>|[ABC]/g, function(s){return s.charAt(0) == "<" ? s : "*";}); 厳密にタグかどうかの判断ができるかと言われると否ですが。

noname#25358
質問者

お礼

 お礼が遅くなってもうしわけありません。  残念ながらうちの環境では動かないみたいでした。  やっぱ難しいですね。うーん……。

関連するQ&A

専門家に質問してみよう