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

How do I replace only a portion of the following regex (JavaScript)?

本文关键字:JavaScript 一部分 正则表达式 何仅 替换      更新时间:2023-09-26

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

匹配并仅替换左括号,
特别是如果它们可以像func(a, func(b))一样嵌套:

data.replace(/func'(/g, 'function(')

注意:在替换字符串需要转义序列进行(的环境中,请使用function'(,这在javascript中不是必需

您的正则表达式也匹配参数(在括号中),并且整个匹配项将仅替换为 function 。您可以:

  • 从匹配中排除参数,例如使用前瞻

    data.replace(/func(?='((.*)'))/g, 'function')
    
  • 或"重新"将它们插入替换字符串中:

    data.replace(/func'((.*)')/g, 'function($1)')
    

在这里,您实际上需要一个积极的前瞻性断言。而且您不需要使用捕获组。

data.replace(/func(?='(.*'))/g, 'function')

.*? 这里将执行任何字符的非贪婪匹配零次或多次。

data.replace(/func(?='(.*?'))/g, 'function')

(?='(.*?')) 断言关键字 func 后必须跟有一对括号,这些括号可能包含也可能不包含参数。