0

まず第一に、私はstackoverflowに慣れていないので、これを間違ったセクションに投稿した場合は申し訳ありません。

htmlタグ内を検索し、-を_に置き換える正規表現が必要です。例:

<TAG-NAME>-100</TAG-NAME>

になります

<TAG_NAME>-100</TAG_NAME>

タグ内の値は影響を受けなかったことに注意してください。

誰か助けてもらえますか?

ありがとう。

4

2 に答える 2

2

JavaScript はDOM 操作用言語であるため、通常は XML を適切に解析し、正規表現の代わりに JavaScript の DOM トラバーサル関数を使用することを検討する必要があります。

DOM トラバーサル関数を使用できるようにXML ドキュメントを解析する方法のサンプル コードを次に示します。次に、すべての要素をトラバースし、それらの名前を変更できます。これにより、テキスト ノード、属性、コメント、およびその他すべての迷惑なものが自動的に除外され、変更したくないものになります。

正規表現でなければならない場合、ここにその場しのぎの解決策があります。属性名またはコメント内にタグ (または のみ) がある場合、ひどく失敗することに注意してください>(実際には、コメントにも置換が適用されます)。

str = str.replace(/-(?=[^<>]*>)/g, '_');

これは、前に遭遇せずに a-が続く場合にa に一致します。この概念は、否定先読みと呼ばれます。修飾子は、すべての出現箇所が確実に置き換えられるようにします。><g

これにより、 の前にあるものすべてに置換が適用されることに注意してください>。属性値も。そうしたくない場合は、次の>ように、ハイフンと終了の間に偶数の引用符があることを確認することもできます。

str = str.replace(/-(?=[^<>"]*(?:"[^<>"]*"[^<>"]*)*>)/g, '_');

ただし、これでも属性は変更されます。

これは、何が機能し、何が機能しないかを示す正規表現のデモです。特にコメントの振る舞いはかなりひどいです。もちろん、これはさらに複雑な正規表現で処理できますが、これがどこに向かっているのかがわかりますか? XML パーサーを実際に使用する必要があります。

于 2012-11-20T14:41:15.767 に答える
0
s/(\<[^\>]+\>)\-([^\<]+\<\/)/\1_\2/

私はJSライブラリに精通していませんが、HTMLを解析するためのより良いライブラリがあると確信しています。

于 2012-11-20T14:35:31.723 に答える