如何在JavaScript中替换多行字符串中最后出现的}?
how to replace last occurrence of a word in javascript?中的方法在多行字符串的情况下不起作用:
"line1}hello\n}\nline2}abc".replace(/(.*)}/g, "$1");
// "line1hello\n\nline2abc"
因为在这种情况下,每个}
都被替换了,这是我不希望的。
注意:这不是Replace last occurrence of character in string的重复,因为我的问题是专门关于多行字符串的,而链接的问题不是。
3条答案
按热度按时间amrnrhlw1#
你只需要将修饰符从
g
(全局)更改为s
(单行):您根本不需要
g
,因为您希望执行单个匹配。默认情况下,正则表达式是每行执行的,但是使用
s
会将输入字符串视为单行。j13ufse22#
你可以使用类似这样的东西:
Regex解释:
/
-启动缓存\}
-查找文字结束花括号(?=[^}]*$)
-在我前面没有其他的花括号,直到字符串(不是一行)的结尾。/
-结束分隔符通过不使用多行标志
/m
,$
表现为字符串结束Meta转义,而不是行尾转义。https://regex101.com/r/Ausg5r/1
请注意,PCRE对字符串结尾
\z
有一个专用的Meta转义,但JS没有。jutyujz03#
您可以使用
/}(?=[^\n]*$)/gm
删除每行中的}
。这个正则表达式的工作原理是寻找一个
}
字符,该字符后面没有另一个}
字符。