我正在尝试使用正则表达式查找并替换我的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*\/})/
有没有一种方法可以添加正斜杠而不添加额外的反斜杠?
答案 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')
})
})
}