我正在学习正则表达式和文件保存。作为练习,我想将文件中的每个func
转换为function
:
data.replace(/func\((.*)\)/g, 'function')
问题是文件中的func
现在最终如下:
var thisfunc = function {
}
而不是:
var thisfunc = function() {
}
我该怎么做才能让正则表达式只替换func
关键字?
修改
输入:
fs.readFile(filename, 'utf8', func(err, data) {
if (err) throw err
console.log('OK: ' + filename)
var newData = data.replace(/func\((.*)\)/g, 'function')
console.log(newData)
})
var thisfunc = func() {
}
答案 0 :(得分:2)
匹配并仅替换左括号,特别是如果它们可以像func(a, func(b))
中那样嵌套:
data.replace(/func\(/g, 'function(')
注意:在替换字符串需要(
的转义序列的环境中,使用function\(
,这在javascript中不是必需的
答案 1 :(得分:1)
您的正则表达式也匹配参数(在括号中),整个匹配将仅由function
替换。你可以:
从匹配中排除参数,例如: lookahead
data.replace(/func(?=\((.*)\))/g, 'function')
或“重新”将它们插入replacement string:
data.replace(/func\((.*)\)/g, 'function($1)')
答案 2 :(得分:1)
这里你实际上需要一个积极的先行断言。而且你不需要使用捕获组。
data.replace(/func(?=\(.*\))/g, 'function')
OR
.*?
这里将对任何字符进行零次或多次非贪婪匹配。
data.replace(/func(?=\(.*?\))/g, 'function')
(?=\(.*?\))
断言关键字func
必须后跟一对括号,它可能包含或不包含参数。