您如何在正则表达式搜索中使用正斜杠?

时间:2019-01-28 19:08:04

标签: javascript regex reactjs

我正在尝试使用正则表达式查找并替换我的react组件中注释之间的所有文本。

这是带有注释的react组件的示例:

<Text>{/*text1*/}hey hey hey{/*text1*/}</Text>

如果将{/*text1*/}更改为{text1},我可以替换文本。问题是,每当我尝试将注释的/* */部分添加到我的正则表达式中时,都会不断添加额外的反斜杠。

下面是我当前的功能,如果我从组件中的注释中删除了/ *和* /,那么它将起作用:

async function doIt(fileName, location, replacementText) {
  let tempRegex = "(?<={" + location + "})(.*)(?={" + location + "})"
  let regex = new RegExp(tempRegex)

  await fs.readFile(path.join(__dirname, fileName), 'utf8', function (err, data) {
    if (err) throw err
    content = data
    content = content.replace(regex, replacementText)

    fs.writeFile(path.join(__dirname, fileName), content, 'utf8', function (err) {
      if (err) throw err
      console.log('FILE SAVED')
    })
  })
}


doIt('change.js', "text1", 'test test')

我的想法是将tempRegex更改为:

"(?<={/*" + location + "*/})(.*)(?={/*" + location + "*/})"

,但它会不断添加其他字符,如下所示:

/(?<={\/*textBox1*\/})(.*)(?={\/*textBox1*\/})/

有没有一种方法可以添加正斜杠而不添加额外的反斜杠?

2 个答案:

答案 0 :(得分:1)

正斜杠/在正则表达式中是一个特殊字符,因为它表示它们的开头和结尾。如果您想在RegExp中定位正斜杠 ,则必须将其转义。这就是反斜杠的作用。

因此此正则表达式无效:

/{//

这是有效的:

/{\//

答案 1 :(得分:0)

我刚刚意识到我的问题是新的RegExp没有转义星号。这是我的最终解决方案。我必须在星号前面添加2个反斜杠才能正常工作。

export default function updateText(fileName, location, replacementText) {
  let tempRegex = "(?<={/\\*" + location + "\\*/})(.*)(?={/\\*" + location + "\\*/})"
  let regex = new RegExp(tempRegex)

  fs.readFile(path.join(__dirname, fileName), 'utf8', function (err, data) {
    if (err) throw err
    content = data
    content = content.replace(regex, replacementText)
    fs.writeFile(path.join(__dirname, fileName), content, 'utf8', function (err) {
      if (err) throw err
      console.log('FILE SAVED')
    })
  })
}