替换节点中的新行?



我正在尝试创建一个脚本来过滤大量歌词文件。这是我的代码:

节点.js

fs.readFile(filePath, 'utf-8', (err, data)=>{
if (err) {
console.log(err)
return
}
data = data.replace(/n[0-9]n/, "Verse " + /n[0-9]n/)
console.log(data)
fs.writeFile(path.join(newDir, file), data, ()=>{
console.log(file)
})
})

原始文本文件

Title
1
Some lyrics
2
Some lyrics

新文本文件的外观

Title
Verse 1
Some lyrics
Verse 2
Some lyrics

它似乎找不到n (newline), a verse number, n (newline).另外,我不确定如何解决明显的问题,.replace()中的第三个参数可能与第一个参数不同。谁能指导我如何过滤这些?

我怀疑在n之前有一个r.但是您无论如何都不想指定n(或rnr?n(;使用多行标志 (m( 并^$断言。(如果您想要做的不仅仅是第一场比赛,您还需要g标志。

另外,我不确定如何解决明显的问题,.replace(( 中的第三个参数可能与第一个参数不同。

第二个,不是第三个(不需要第三个(。若要使用字符串中匹配的内容,可以使用$&(或传入函数并使用它接收的第一个参数(。MDN 文档中的详细信息(当然,还有规范(。

mg和断言:

data = data.replace(/^[0-9]$/gm, "Verse $&");

现场示例:

let data =
"Titlern" +
"rn" +
"1rn" +
"Some lyricsrn" +
"rn" +
"2rn" +
"Some lyricsrn";
data = data.replace(/^[0-9]$/gm, "Verse $&");
console.log(data);
console.log(JSON.stringify(data));

您可以确保replace方法第二个参数replacement function。 以下是示例用法。

let data = "1";
data = data.replace(/([0-9])/, match => "Verse " + match);
console.log(data)

最新更新