使用正则表达式替换函数调用

时间:2016-07-14 10:53:35

标签: javascript regex sed

我有这样的功能

Add(1,2);
Add(3,4);

需要替换为

Add({num1 : 1, num2 : 2});
Add({num1 : 3, num2 : 4});

这发生在多个文件的数百个地方,所以我想写一个可以为我做这个的脚本。

使用正则表达式我可以找到发生这种情况的地方

/Add\(.*\);/

但是我不确定如何用我需要的内容替换函数调用的内部。

我还不确定用于编写脚本的最佳语言。我打算用JavasScript在节点中编写它,但是如果有一个简单的解决方案,就会使用带有sed的Bash。

4 个答案:

答案 0 :(得分:2)

您可以使用适当的字符串替换。

var regex= /(Add\()(\d+),(\d+)(\))/g,
    replace = '$1{num1: $2, num2: $3}$4'

console.log('Add(3,4);'.replace(regex, replace));

答案 1 :(得分:1)

我会选择:

perl -i -pe 's/Add\((\d+),(\d+)\)/Add({num1 : $1, num2 : $2})/' filename

关于正则表达式,它不完整,/Add\((\d+),(\d+)\)/将负责捕获指令并将第一个和第二个数字分别捕获到$1$2

标志的工作原理如下:

  • -i进行就地编辑(这会重写您的文件;如果您对此不满意,请删除标记以查看输出或使用-i.bak创建您的备份文件
  • -p解析每一行并在最后打印
  • -e(来自“eval”)是允许您运行单行而不是脚本的原因

答案 2 :(得分:0)

试试这个sed方法

sed 's/\([^(]\+.\)\([^,]\+.\)\([^)]\+\)\(.*\)/\1{num1 : \2,num2 : \3}\4/g' FileName

答案 3 :(得分:0)

这应该适合你:

sed -i 's/Add(\([0-9]*\),\([0-9]*\))/Add({num1 : \1, num2 : \2})/' file

-i选项用于编辑文件