我开始使用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\''))
有几个问题:
所以像#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函数中的调试器不能工作,所以我需要使用错误代码创建自己的调试函数来定位错误。它几乎就是我现在能做的所有......
非常感谢任何帮助!
答案 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}\')`
));
除此之外,您的代码没有改变。