[英]JS str.replace(regex, function) is not being greedy
I have this regex, which grabs a newline-separated block of text where all lines are indented by two spaces: 我有此正则表达式,它捕获换行符分隔的文本块,其中所有行均由两个空格缩进:
chorusRegex = /((?:(?:\n|^) .*)+)/g
On regex101 (see exact snippet here https://regex101.com/r/BFMtHP/1 ) it works fine (grabs the whole block as one match), but when I do this: 在regex101上(请在此处查看确切的片段https://regex101.com/r/BFMtHP/1 ),它可以正常工作(将整个块作为一个匹配项抓取),但是当我这样做时:
lyrics = lyrics.replace(chorusRegex, function($0, $1) {
return "<div class='chorus'>" + $1 + "</div>"
})
Instead of putting the div around each indented block of text, it puts divs around each line that's indented. 而不是将div放在每个缩进的文本块周围,而是将div放在每个缩进的行周围。
Why is lyrics.replace
not being greedy, and instead repeating over each line? 为什么lyrics.replace
不贪婪,而是在每一行重复出现?
I have this as lyrics
我有这个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"
And I want the replace
function to produce this: 我想要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>"
But the problem is my current code is producing this: 但是问题是我当前的代码正在产生这个:
"[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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.