C#中的正则表达式-从一个值中删除引号和转义引号,然后再删除另一个值

C#中的正则表达式-从一个值中删除引号和转义引号,然后再删除另一个值,c#,regex,C#,Regex,我使用HighCharts并从C#生成脚本,不幸的是,他们使用内联函数作为格式化程序和事件。不幸的是,我无法从我所知道的任何序列化程序中输出JSON。换句话说,他们想要这样的东西: "labels":{"formatter": function() { return Highcharts.numberFormat(this.value, 0); }} "formatter":"function() { alert(\"hi!\"); return Highcharts.numberFormat

我使用HighCharts并从C#生成脚本,不幸的是,他们使用内联函数作为格式化程序和事件。不幸的是,我无法从我所知道的任何序列化程序中输出JSON。换句话说,他们想要这样的东西:

"labels":{"formatter": function() { return Highcharts.numberFormat(this.value, 0); }}
"formatter":"function() { alert(\"hi!\"); return Highcharts.numberFormat(this.value, 0); }"
由于我的序列化程序可用,我只能到这里:

"labels":{"formatter":"function() { return Highcharts.numberFormat(this.value, 0); }"}
这些用于单击事件以及格式化程序,我绝对需要它们

所以我在想regex,但已经很多年了,而且我从来都不是regex巫师

我可以在最终序列化的字符串上使用什么样的正则表达式替换,以将以function()开头的任何带引号的值替换为其自身的无引号版本?此外,函数本身可能有“in-it,在这种情况下,带引号的字符串可能有\”,这也需要被替换回\”

我假设我可以在这里使用第一个答案的变体:

但我似乎无法做到。看在上帝的份上,请帮助我

我为此付出了更多的汗水,我想出了

    serialized = Regex.Replace(serialized, @"""function\(\)[^""\\]*(?:\\.[^""\\]*)*""", "function()$1");
然而,我的最终结果总是:

formatter:function()$1
这告诉我我匹配的是正确的东西,但我的捕获工作不正常。现在我觉得我可能是一个有一些C#特定正则表达式情况的白痴

更新:是的,我是个白痴。我没有捕捉到我真正想要的东西

   `enter code here` serialized = Regex.Replace(serialized, @"""function\(\)([^""\\]*(?:\\.[^""\\]*)*)""", "function()$1");
这就是我的对手,但在这种情况下:

"labels":{"formatter": function() { return Highcharts.numberFormat(this.value, 0); }}
"formatter":"function() { alert(\"hi!\"); return Highcharts.numberFormat(this.value, 0); }"
它返回:

"formatter":function() { alert(\"hi!\"); return Highcharts.numberFormat(this.value, 0); }
我需要摆脱那些讨厌的反斜杠。现在我想我真的被卡住了。

Regexp for match

"function\(\) (?<code>.*)"
替换表达式

function() ${code}
用于匹配的Regexp

"function\(\) (?<code>.*)"
替换表达式

function() ${code}

试试这个:

它的作用是:

查找函数声明之前和之后的双引号

Regex:

(")(?=function()).+(?<=\})(")
3 capturing groups: 
   group 1: (")
   group 2: ()
   group 3: (")

试试这个:

它的作用是:

查找函数声明之前和之后的双引号

Regex:

(")(?=function()).+(?<=\})(")
3 capturing groups: 
   group 1: (")
   group 2: ()
   group 3: (")

这是否考虑了转义引号?@InsidentiousForce你是什么意思?
”函数()中的
\“
{返回Highcharts.numberFormat(this.value,0);}”
?是的,它们有时会出现,“会被序列化程序转义为\”。@InsidentiousForce刚刚检查过它。如果在
“function(){return Highcharts.numberFormat(this.value,0);}”
中有转义引号,则完全没有问题。看一看:@signiousforce,如果转义引号是您唯一的问题,为什么不在最后一个字符串中用
替换
?这是否考虑了转义引号?@signiousforce您的意思是什么<代码>\“
”函数(){return Highcharts.numberFormat(this.value,0);}”
中的“”?是的,它们有时会出现,“会被序列化程序转义为\”。@InsidentiousForce刚刚检查过它。如果在
”函数(){return Highcharts.numberFormat(this.value,0);}中有转义引号,则没有问题“
。看一看:@signiousforce同样,如果转义引号是您唯一的问题,为什么不在最后一个字符串中用
替换