问题描述
我对正则表达式很讨厌,需要将所有只有一个参数的函数替换为该参数。如果只有1个参数,也就是删除函数调用并保留参数,否则忽略它。
Some.functionName( OneParameter );
Some.functionName( OneParameter,TwoParameter );
上面的 Some.functionName( OneParameter );会变成
OneParameter
我唯一的想法是:
^Some.functionName([!,])
所以基本上找到所有类似的函数都没有逗号并删除它周围的函数调用。
解决方法
替换:Some.functionname\(([^,)]*)\)
与:$1
[^,)]*
匹配任何不包含逗号或右括号的序列。所以如果它不包含任何逗号,这将匹配参数列表的内部。
请注意,如果您有嵌套的函数调用,这将不起作用,例如
Some.functionname(otherfunc(1));
因为内部 )
将结束匹配。正则表达式不擅长匹配平衡分组。