【问题标题】:How do you use a forward slash in a regex search?如何在正则表达式搜索中使用正斜杠?
【发布时间】:2019-01-28 19:08:04
【问题描述】:

我正在尝试使用正则表达式在我的反应组件中查找和替换 cmets 之间的所有文本。

这是一个带有 cmets 的 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 更改为:

"(?&lt;={/*" + location + "*/})(.*)(?={/*" + location + "*/})"

但它不断添加额外的字符,看起来像这样:

/(?&lt;={\/*textBox1*\/})(.*)(?={\/*textBox1*\/})/

有没有办法在不添加额外反斜杠的情况下添加正斜杠?

【问题讨论】:

  • 它不加反斜杠,这只是为了打印。
  • 正斜杠在正则表达式中有意义,所以如果你想搜索一个正斜杠,你需要转义它们。这就是反斜杠的作用。

标签: javascript regex reactjs


【解决方案1】:

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

所以这个正则表达式是无效的:

/{//

而这个是有效的:

/{\//

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多