如何替换 Javascript 中多行字符串中最后出现的 } ?
如何替换javascript中最后一次出现的单词的方法?在多行字符串的情况下不起作用:
"line1}hello\n}\nline2}abc".replace(/(.*)}/g, "$1");
// "line1hello\n\nline2abc"
因为在这种情况下,每个都}
被替换,这是我不想要的。
注意:它不是替换字符串中最后出现的字符的重复项,因为我的问题专门针对多行字符串,而链接的问题不是。
如何替换 Javascript 中多行字符串中最后出现的 } ?
如何替换javascript中最后一次出现的单词的方法?在多行字符串的情况下不起作用:
"line1}hello\n}\nline2}abc".replace(/(.*)}/g, "$1");
// "line1hello\n\nline2abc"
因为在这种情况下,每个都}
被替换,这是我不想要的。
注意:它不是替换字符串中最后出现的字符的重复项,因为我的问题专门针对多行字符串,而链接的问题不是。
您只需将修饰符从
g
(全局)更改为s
(单行):您根本不需要,
g
因为您只想执行一场比赛。默认情况下,正则表达式按行执行,但使用
s
会将输入字符串视为单行。你可以使用这样的东西:
正则表达式解释:
/
- 开始分隔符\}
- 查找文字右大括号(?=[^}]*$)
- 在我前面没有其他右大括号,直到字符串(不是行)的末尾/
- 结束分隔符通过不使用多行标志
/m
,其$
行为就像字符串结尾元转义而不是行尾。https://regex101.com/r/Ausg5r/1
请注意,PCRE 有一个专用于字符串结尾的元转义符,
\z
但 JS 没有。您可以在每一行中使用
/}(?=[^\n]*$)/gm
for 删除。}
该正则表达式的工作原理是查找字符串其余部分中任何位置后面都
}
没有跟随另一个字符的字符。}