JavaScript多行正则表达式替换

33
"foo\r\nbar".replace(/(foo).+/m, "bar")

你好。我不明白为什么这段代码不能将foo替换为bar。

2个回答

39

我不明白为什么这段代码不能将foo替换成bar

因为点号.明确地不匹配换行符。

以下代码可以实现替换:

"foo\r\nbar".replace(/foo[\s\S]+/m, "bar")

因为换行符(\s)也被视为空格。

请注意,围绕 foo 的括号是多余的,这里没有任何益处。


谢谢,我不知道。在 Ruby 中,默认情况下会执行此操作。 - Andrey Kuznetsov
7
[\s\S](?:.|\s)更好用,关于原因请参考Erik Corry在这个问题的回答:https://dev59.com/FnE95IYBdhLWcg3wN7Ov - Alan Moore

24

JavaScript不支持点号匹配所有字符的修饰符。一个常见的替代方法是:

"foo\r\nbar".replace(/(foo)[\s\S]+/, "bar")

/m 可以让 ^$ 正确匹配行首和行尾,但对于 . 没有影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,