我有这个正则表达式,它抓取换行符分隔的文本块,其中所有行都缩进两个空格:
chorusRegex = /((?:(?:\n|^) .*)+)/g
在regex101上(请参阅此处的确切片段https://regex101.com/r/BFMtHP/1),它工作正常(将整个块作为一个匹配项抓取),但是当我这样做时:
lyrics = lyrics.replace(chorusRegex, function($0, $1) {
return "<div class='chorus'>" + $1 + "</div>"
})
不是在每个缩进的文本块周围放置div,而是在每行缩进的周围放置div。
为什么lyrics.replace
不贪婪,而是重复每一行?
我将此作为lyrics
"[D]No tenemos Sumo [A]Sacerdote que
No [Bm]se compadece en [G]mi debilidad
[D]Sino Uno que fue [A]tentado en todo [Bm]igual
Que nosotros[G]
[]Sin pecado.
[D]Vamos confiada[A]mente
Al [Bm]trono de la [G]gracia por
[D]Misericordia, [A]gracia
Y opor[Bm]tuno so[G]corro h[D]allar.
sadf
sadf
weqrqwer"
我希望replace
函数能够产生这个:
"[D]No tenemos Sumo [A]Sacerdote que
No [Bm]se compadece en [G]mi debilidad
[D]Sino Uno que fue [A]tentado en todo [Bm]igual
Que nosotros[G]
[]Sin pecado.
<div class='chorus'>
[D]Vamos confiada[A]mente
Al [Bm]trono de la [G]gracia por
[D]Misericordia, [A]gracia
Y opor[Bm]tuno so[G]corro h[D]allar.
</div>
<div class='chorus'>
sadf
sadf
weqrqwer
</div>"
但问题是我目前的代码产生了这个:
"[D]No tenemos Sumo [A]Sacerdote que
No [Bm]se compadece en [G]mi debilidad
[D]Sino Uno que fue [A]tentado en todo [Bm]igual
Que nosotros[G]
[]Sin pecado.
<div class='chorus'>
[D]Vamos confiada[A]mente
</div>
<div class='chorus'>
Al [Bm]trono de la [G]gracia por
</div>
<div class='chorus'>
[D]Misericordia, [A]gracia
</div>
<div class='chorus'>
Y opor[Bm]tuno so[G]corro h[D]allar.
</div>"
答案 0 :(得分:3)
var lyrics = "[D]No tenemos Sumo [A]Sacerdote que\n\
No [Bm]se compadece en [G]mi debilidad\n\
[D]Sino Uno que fue [A]tentado en todo [Bm]igual\n\
Que nosotros[G]\n\
[]Sin pecado.\n\
\n\
[D]Vamos confiada[A]mente\n\
Al [Bm]trono de la [G]gracia por\n\
[D]Misericordia, [A]gracia\n\
Y opor[Bm]tuno so[G]corro h[D]allar.\n\
\n\
sadf\n\
sadf\n\
weqrqwer",
chorusRegex = /((?:(?:\n|^) .*)+)/g;
lyrics = lyrics.replace(chorusRegex, "<div class='chorus'>$1</div>");
console.log(lyrics)