javascript - JS string.replace(regex, function) 并不贪婪

标签 javascript regex replace

我有这个正则表达式,它捕获一个以换行符分隔的文本 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/

相关文章:

javascript - 如何获取 obj 值和键来为 POST 方法构建数组对象

javascript - CKEditor 5 在元素上设置样式

regex - 查找/替换功能允许边界替换而不是表达式

Python pandas 替换函数不适用于转义字符

javascript - 如何在句号后用逗号分隔单词

java - 将数组中的双空格替换为单空格

javascript - 正则表达式查找标签和变量

javascript - 加载 Jquery Mobile 时未捕获类型错误 : Object function ( name, 基础、原型(prototype))

Python:在一个正则表达式中多次使用同名捕获组

正则表达式:刚果共和国,但不是刚果民主共和国