我有这个正则表达式,它捕获一个以换行符分隔的文本 block ,其中所有行都缩进两个空格:
chorusRegex = /((?:(?:\n|^) .*)+)/g
在 regex101 上(请参阅此处的确切代码片段 https://regex101.com/r/BFMtHP/1 )它工作正常(将整个 block 作为一场比赛),但是当我这样做时:
lyrics = lyrics.replace(chorusRegex, function($0, $1) {
return "<div class='chorus'>" + $1 + "</div>"
})
它不是将 div 放在每个缩进的文本 block 周围,而是将 div 放在每个缩进的行周围。
为什么lyrics.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.
[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>"
最佳答案
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)
关于javascript - JS string.replace(regex, function) 并不贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821003/