2016-05-04 7 views
1

で開閉HTMLタグを取り付けI以下のマークアップがあります。は正規表現

<span style="font-size: 24px;"><font face="Courier New">[[code]]</font></span><br><p></p><span>{{name}}</span><span>[[otherCode]] </span> 

をし、私は二重括弧列をラップスパンを交換する必要があると思います。私は正規表現は、通常は推奨されていないことを知っている、すなわち、{{name}を}囲むスパンが変更されていない(

<div style="font-size: 24px;"><font face="Courier New">[[code]]</font></div><br><p></p><span>{{name}}</span><div>[[otherCode]] </div> 

のが、この中:。。だから、場合に私が取得する必要があると思い上私はそれが私が持っている唯一の選択肢だと感じています。(もっと良い選択肢になると思うなら、jQueryとDOMアクセスがあります。)

これまで私は正規表現で試してきましたが、 {{}}ケースを避けるこれは私が現在持っているものです。

/(<span[^>]*>(.*?\[\[\s*[^\]]+\s*\]\].*?)<\/span>)/gim 

となり、最初のスパン終了タグで停止する方向に向かうと思います。

+0

私はDOM、jQueryを使って解答し、 'の.text()を感じている'くる.... –

+0

は必須の正規表現ですか?これは、正規表現なしで達成することができます – Satpal

+0

"あなたはpropably正規表現を使用したくない" 3の波...編集:ああ!それは既にここにあります。 – Benio

答えて

1

あなただけ{秒でHTMLを避けたいと仮定すると、あなたはこの正規表現にいくつかのバリエーションを使用することができます。

<span[^>]*>[^{]*</span> 

スパンの間に[[ ]]があることを確認するには、これに正規表現を変更することができます:

<span[^>]*>[^{]*?\[\[[^\]]*\]\][^{]*?</span> 

私はいくつかの間隔でそれを書き換えてみましょう:

<span[^>]*> 
    [^{]*? \[\[ [^\]]* \]\] [^{]*? 
</span> 

は(あなたが/脱出しなければならないことに注意してください。)

あなたはdiv秒でspan Sを交換したいので、あなたがこのようなかっこを取り込む追加することができます。

<span([^>]*>[^{]*?\[\[[^\]]*\]\][^{]*?</)span> 

あなたの交換は次のようになります。 <div$1div>

私はあなたの一つのサンプルでオンラインそれをテストするときに動作しますが、HTML内の特定の文字がある場合、それは失敗します。また、HTML構造に依存して、特にそれが形成されていない場合には、破損する可能性があります。

これらのケースでは、実際のパーサーを使用する方が簡単かもしれません。代わりに、あなたはまだ正規表現を使用することができるかもしれませんが、あなたはHTMLを分割し、正常に動作するチャンクを渡すだけであることを保証します。

+0

ありがとうございます。あなたの正規表現は私より優れています。問題は、あなたが推測したように、これは非常に拡張性がないかもしれないということです。たとえば、 "こんにちは"となる可能性があります。この正規表現はこのケースでは機能しません。理想的には、正規表現は正のケース(つまり二重括弧にマッチする)と比較するべきですが、私は正規表現を見つけることができません。とにかく、jQueryを試して、これを解析する方法を見てみましょう。 – Dan

+0

@ダン私は私の答えに別の正規表現を追加しました。これは、二重括弧があることを保証します。 – Laurel

+0

これを見直す時間をいただき、ありがとうございます。大変感謝しています。残念ながら、新しい正規表現には新しい問題があります。わかりやすくするために、ここに問題を示すスニペットを作成しました。https://jsfiddle.net/2t5feexL/文字列の最後に誤った置換文字が表示されます。 – Dan