我需要在Javascript文件中转换一些使用括号而不是括号的变量。例如,MyVariable(i)应该是MyVariable [i]。
我使用此正则表达式使用Visual Studio的 查找和替换 工具:
MyVariable\({(.+)}\)
并替换为:
MyVariable\[\1\]
这项工作适用于以下情况:
asdas.MyVariable(i+1)
asdas.MyVariable(i)
asdas.MyVariable(i).asd
MyVariable(i+1)
但是对于像
这样的情况不起作用if (parseInt(OtherObject.MyVariable(i+1).Dest.XYZ)==SINK_STATE_TYPE || OtherObject.MyVariable(i).X == "ok")
最后一个将采取第一个括号和最后一个行并且行为怪异。我需要在正则表达式中进行哪些更改才能使其与包含多个括号的行一起使用。
答案 0 :(得分:5)
你的模式很贪婪。 (.+)
部分匹配所有内容,包括右括号)
字符,直到它到达最后一个)
字符。为了使其不贪婪,您可以使用#
而不是+
,这意味着“匹配前一个表达式的一个或多个匹配项,并匹配尽可能少的字符。”在.NET中,通常在?
之后放置.+?
来处理,例如#
,但Visual Studio正则表达式的风格不同,而是使用MyVariable\({(.#)}\)
元字符。
更新的模式变为:
[^)]+
您还可以使用)
,它匹配任何不是)
字符的字符。当遇到MyVariable\({([^)]+)}\)
时,它将停止匹配。这种替代模式是:
{{1}}
如果您熟悉.NET正则表达式,那么您可能有兴趣查看Visual Studio 2010 Productivity Power Tools,它已扩展了Find / Replace以允许使用.NET正则表达式。