RegEx更改函数名称和字符串参数

时间:2017-09-27 13:40:39

标签: javascript node.js regex

我开始使用RegEx非常糟糕。无论如何,我尽我所能,并认为我已经走得很远,但我还没到那里......

我有什么: 我需要在Node.js中处理的javascript源文件。看起来像这样:

var str = "require(test < 123)\n\nrequire(test2 !== test)\n\nfunction(dontReplaceThisParam) {\n    console.log(dontReplaceThisParam)\n}";

我想出了什么:

console.log(str.replace(/\(\s*([^)].+?)\s*\)/g, 'Debug$&, \'error_1\''))

有几个问题:

  1. 我希望字符串错误进入paranthesis,因此它充当第二个参数。
  2. 所有函数调用,或者我认为即使是所有具有paranthesis的函数都将被替换。但只有函数调用&#34; require(xxx)&#34;应该被触动。
  3. 此外,如果可能,错误代码应以某种方式递增......
  4. 所以像#34;字符串需要(test == 123)&#34;应转换为&#34; requireDebug(test == 123,&#39; error_N&#39;)&#34;但只能打电话给&#34;需要&#34; ...

    我的代码目前输出的内容:

    requireDebug(test < 123), 'error_1'
    
    requireDebug(test2 !== test), 'error_1'
    
    functionDebug(dontReplaceThisParam), 'error_1' {
        console.logDebug(dontReplaceThisParam), 'error_1'
    }
    

    我需要什么:

    requireDebug(test < 123, 'error_1')
    
    requireDebug(test2 !== test, 'error_2')
    
    function(dontReplaceThisParam) {
        console.log(dontReplaceThisParam)
    }
    

    我知道我可以手动执行这样的操作,但我们在这里谈论几百个源文件。我也知道做这些事情并不是一个很好的方法,但是require函数中的调试器不能工作,所以我需要使用错误代码创建自己的调试函数来定位错误。它几乎就是我现在能做的所有......

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用require启动正则表达式,因为您需要递增计数器,所以将函数作为第二个arg传递给replace,这样您就可以为每个匹配增加并插入计数器。

var str = "require(test < 123)\n\nrequire(test2 !== test)\n\nfunction(dontReplaceThisParam) {\n    console.log(dontReplaceThisParam)\n}";
var counter = 0;

console.log(str.replace(/require\(\s*([^)].+?)\s*\)/g, (s, g2) => 
  `requireDebug(${g2}, \'error_${++counter}\')`
));

除此之外,您的代码没有改变。