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

The following should work (as a temporary fix):

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

This will match all double quotes where there are no < characters before the next >.

于 2012-04-04T19:27:23.123 回答
0

Try replacing the (.*?) in the center part with a ([^<>]*?)
You have to be careful with the dot operator.

于 2012-04-04T19:25:59.817 回答
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

如果 JSON 格式正确,并且您在标签之外没有任何属性类型语法,则以下内容应该适用于单行修复:

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 回答
-1

如果这是 perl,您可以执行以下操作:

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