繁体   English   中英

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

[英]How do you use a forward slash in a regex search?

我正在尝试使用正则表达式查找并替换我的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*\\/})/

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

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

因此,此正则表达式无效:

/{//

鉴于此有效:

/{\//

我刚刚意识到我的问题是新的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')
    })
  })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM