如何仅替换以下正则表达式(JavaScript)的一部分?

时间:2015-02-01 15:28:39

标签: javascript regex

我正在学习正则表达式和文件保存。作为练习,我想将文件中的每个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() {

}

3 个答案:

答案 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必须后跟一对括号,它可能包含或不包含参数。