正则表达式用括号替换括号

Pat*_*ins 2 regex replace visual-studio-2010

我需要在Javascript文件中转换一些使用括号而不是括号的变量.例如,MyVariable(i)应该是MyVariable [i].

我使用Visual Studio 的查找和替换工具与此正则表达式:

MyVariable\({(.+)}\)
Run Code Online (Sandbox Code Playgroud)

并替换为:

MyVariable\[\1\]
Run Code Online (Sandbox Code Playgroud)

这项工作适用于以下情况:

asdas.MyVariable(i+1)
asdas.MyVariable(i)
asdas.MyVariable(i).asd
MyVariable(i+1)
Run Code Online (Sandbox Code Playgroud)

但不适用于案例

if (parseInt(OtherObject.MyVariable(i+1).Dest.XYZ)==SINK_STATE_TYPE || OtherObject.MyVariable(i).X == "ok")
Run Code Online (Sandbox Code Playgroud)

最后一个将采取第一个括号和行的最后一个并且行为很奇怪.我需要在正则表达式中进行哪些更改才能使其与具有多个括号的行一起使用.

Ahm*_*eed 5

你的模式很贪婪.该(.+)部分匹配所有内容,包括右括号)字符,直到它到达最后一个)字符.为了使它非贪婪,你可以使用#而不是+,这意味着"匹配前面表达式的一个或多个匹配项,并匹配尽可能少的字符." 在.NET中,通常通过放置?它来处理,例如.+?但Visual Studio正则表达式的风格不同并使用#元字符.

更新的模式变为:

MyVariable\({(.#)}\)
Run Code Online (Sandbox Code Playgroud)

您也可以使用[^)]+,匹配任何不是)字符的字符.遇到)它时会停止匹配.这种替代模式是:

MyVariable\({([^)]+)}\)
Run Code Online (Sandbox Code Playgroud)

如果您熟悉.NET正则表达式,那么您可能有兴趣查看Visual Studio 2010 Productivity Power Tools,它扩展了Find/Replace以允许使用.NET正则表达式.