我正在尝试创建一个脚本来过滤大量歌词文件。这是我的代码:
节点.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
(或rn
或r?n
(;使用多行标志 (m
( 并^
和$
断言。(如果您想要做的不仅仅是第一场比赛,您还需要g
标志。
另外,我不确定如何解决明显的问题,.replace(( 中的第三个参数可能与第一个参数不同。
第二个,不是第三个(不需要第三个(。若要使用字符串中匹配的内容,可以使用$&
(或传入函数并使用它接收的第一个参数(。MDN 文档中的详细信息(当然,还有规范(。
m
、g
和断言:
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)