2

序文として、私はサーバーの人々が修正するのを待っているバグを乗り越えるために、この正規表現が必要です。

基本的に、HTML のエスケープされていない " 文字で JSON を取得します。<> 文字の間を調べ、" を \" に置き換える正規表現が必要です。

<div style="padding: 0%; width: 100%;"><span style="font-family:verdana;"><span style="font-size: 72px;">Demo!</span></span></div>

更新情報: テキストは、最終的に通常の JSON に解析する必要がある文字列として返される json 内にあり、解析は失敗します。

文字列は次のようになります。

"{
"overlay": "overlay1",
"type": "text", 
"text": "<div style="padding: 0%; width: 100%;"><span style="font-family:verdana;"><span style="font-size: 72px;">Demo!</span></span></div>"
}"

これは私が見つけたこれまでの正規表現です(私はいくつかの正規表現を知っていますが、先読みまたは後読みについてはあまり知りません

/(?<=\<)(.*?)(?=\>)/g

しかし、それを使用しても、これを取得するだけです:

< div style="パディング: 0%; 幅: 100%;" >< span style="font-family:verdana;" >< span style="font-size: 72px;" >デモ!< /span >< /span >< /div >

(基本的には <> 文字内のすべて。実際に <> 内の " のみをターゲットにしたい場合。)

誰でも簡単な一時的な修正を推奨できますか? ありがとう!

4

5 に答える 5

3

以下は機能するはずです(一時的な修正として):

/"(?=[^<]*>)/g

<これは、次の の前に文字がないすべての二重引用符に一致します>

于 2012-04-04T19:27:23.123 に答える
0

JSONが他の点で整形式であり、タグの外に属性タイプの構文がない場合は、1行の修正で次のように機能するはずです。

var str = '<div style="padding: 0%; width: 100%;"><span style="font-family:verdana;"><span style="font-size: 72px;">Demo!</span></span></div>'
str.replace(/([\w-]+)=\"(.*?)\"/g, '$1=\\\"$2\\\"')
>> "<div style=\"padding: 0%; width: 100%;\"><span style=\"font-family:verdana;\"><span style=\"font-size: 72px;\">Demo!</span></span></div>"

これにより、すべてのHTML属性が表示される場所(必ずしもタグ内である必要はありません)の前にスラッシュが追加されます。より適切にターゲットを設定する必要がある場合は、最初の検索を実行してタグを分離してから、この正規表現の置換を行う各タグをループします。

ちなみに、なぜ「やるべきではないのはわかっている」と言うのですか?これは正規表現に最適です!

于 2012-04-04T19:41:12.427 に答える
0

これを試して:

string = string.replace(/\"/g, "\\\"");

// - - 編集 - -

var someString = "{
"overlay": "overlay1",
"type": "text", 
"text": "<div style="padding: 0%; width: 100%;"><span style="font-family:verdana;"><span style="font-size: 72px;">Demo!</span></span></div>"
}";

someString = someString.replace(/"(?=[^<]*>)/g, "\\\"");  //Props @F.J for this RegEx
Obj = $.parseJSON(someString);
console.log(Obj.text);
于 2012-04-04T19:30:14.167 に答える
0

(.*?)中央部分の を a に置き換えてみてください([^<>]*?)
。ドット演算子には注意が必要です。

于 2012-04-04T19:25:59.817 に答える
-1

これが perl の場合、次のようにすることができます。

$string =~ s/(?!\\)"/\\"/g;
于 2012-04-04T19:30:40.927 に答える