使用正则表达式来转义单引号内的双引号

我需要一个正则表达式来逃避或捕获(如果尚未转义)所有双引号字符INSIDE单引号字符串然后将开头单引号转换为双引号! 我们在PHP和JS文件中重构那些有很多(我的意思是很多!)单引号字符串的文件。它们唯一的共同点是字符串至少在一行中,并且在两种语言中都与=结合。 我举一个例子(这个例子是丑陋的遗留代码,所以不要判断它,我已经做了这个:)) 我们有一个如下所示的文件:
var baseUrl = $("#baseurl").html();
var head = '<div id="finishingDiv" style="background-image:url({baseUrl}css/userAd/images/out_main.jpg); background-repeat: repeat-y; ">'+
'<div id="buttonbar" style="width:810px; text-align:right">';
我希望它看起来像这样:
var baseUrl = $("#baseurl").html();
var head = "<div id="finishingDiv" style="background-image:url({baseUrl}css/userAd/images/out_main.jpg); background-repeat: repeat-y; ">" +
"<div id="buttonbar" style="width:810px; text-align:right">";
如您所见,未触及正确的双引号字符串。 所以我的基本问题是:我如何捕获某个开头和结尾字符(在我的情况下是字符')之间的所有字符(在我的例子中是字符“)。 这个正则表达式
'.*(").*'
'[^']*(")[^']*'
只为每场比赛捕获一个“对我来说。如果需要多于一步它也可以,它应该正常工作。 我会很高兴任何解决方案,特定于IDE,特定于语言或特定于shell,这些都是可行的。 请帮忙,我绝望,非常感谢     
已邀请:
最大的问题是要弄清楚所有字符串的位置,因为你不能用正则表达式解析所有的JS或PHP。但是,如果我假设你不关心注释,这个Ruby代码将捕获大多数情况(但你应该检查它的输出):
#!/usr/bin/ruby -p

gsub!(/'((?:[^\']|\[\'])+)'/) do |m|
  %Q{"#{$1.gsub("\'","'").gsub(/\[^\]/) { "\#{$0}" }.gsub('"','\"')}"}
end
此代码采用stdin上的任何内容/文件参数的内容,查找单引号字符串(考虑到可能存在的
\
'
),然后,为了替换它,在匹配的字符串中运行一系列替换(消毒反斜杠等)。结果打印到stdout。如果您想要更自动化的方法,请将第一行替换为
#!/usr/bin/ruby -pi.bak
;然后,无论文件参数如何呈现,都会在其中破坏性地对其进行替换。旧文件保留了额外的
.bak
扩展名。 要运行此代码,如果您之前没有使用过Ruby:将其保存为任何内容,例如
fix-sq.rb
;跑
chmod +x fix-sq.rb
;然后运行
./fix-sq.rb file1 file2 file3
。     
正则表达式只捕获一个“因为你只需要一个。如果你想捕获所有引号,你需要更像中间的
(".*)+
。这就是说,”捕获一个或多个这种模式:双引号如下零个或多个任何字符。“     

要回复问题请先登录注册