- 締切済み
正規表現で一発置き換え
次のような条件の正規表現を模索中です。 ・対象は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>があれば、それ以降を全て置き換え対象外とする」という仕様にしてしまったためです。 なんとか一文でバチッと置き換えるようなものがあれば、ヒントだけでも結構ですのでお教えください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 665
- ベストアンサー率72% (18/25)
例えばこんな感じですかね。 string.replace(/<STARTCOMMENT>(.|\n){0,}?<\/ENDCOMMENT>|<\/?[a-zA-Z!][^<>]*>|[ABC]/g, function(s){return s.charAt(0) == "<" ? s : "*";}); 厳密にタグかどうかの判断ができるかと言われると否ですが。
お礼
お礼が遅くなってもうしわけありません。 残念ながらうちの環境では動かないみたいでした。 やっぱ難しいですね。うーん……。