正则表达式匹配替换问题?

字符串1
test()
欲替换成->
print("test()")

字符串2
test(a, b)
欲替换成->
print("test(a, b)", a, b)

怎么样写匹配和替换正则, 能不能用正则替换实现?

^(test\((.*)\))$
->
print\("\1"\, \2\)

我这样写字符串1不能正确替换..

阅读 3.6k
4 个回答
var str = "test(p1,p2)";
var reg = /^test\((.*)\)$/;
var changeStr = str.replace(reg,function(match,$1){ return $1?`print("${match}",${$1})`:`print("${match}")`});
console.log(changeStr);

clipboard.png

var reg = /^(?!\d)([A-Za-z\d_$]+)\(((?!\d)[A-Za-z\d_$]+(?:\,(?!\d)[A-Za-z\d_$]+)+)?\)/; //验证变量合法性
var str= 'test(a,b,egergergerg,n,z,gergerg,fadwaZ1,f1,a_1,aaam,hg4)'; //测试数据
str = str.replace(reg,key = str.match(reg)[2]?'print\("$1($2)"\, $2)':'print\("$1()")');

一条正则估计无法替换你说的两处不同的情况。

源串:test(a, b)
查找:([^\(\)\s]+\(([^,\)]+,[^,\)]+)?\))
替换:print\(\"\1\"\,\2\)

图片描述

源串:test()
查找:([^\(\)\s]+\(\))
替换:print\(\"\1\"\)

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进