我不明白为什么这段代码不能将foo替换成bar 因为点号.明确地不匹配换行符。 以下代码可以实现替换:"foo\r\nbar".replace(/foo[\s\S]+/m, "bar") 因为换行符(\s)也被视为空格。 请注意,围绕 foo 的括号是多余的,这里没有任何益处。
JavaScript不支持点号匹配所有字符的修饰符。一个常见的替代方法是:"foo\r\nbar".replace(/(foo)[\s\S]+/, "bar") /m 可以让 ^ 和 $ 正确匹配行首和行尾,但对于 . 没有影响。
[\s\S]比(?:.|\s)更好用,关于原因请参考Erik Corry在这个问题的回答:https://dev59.com/FnE95IYBdhLWcg3wN7Ov - Alan Moore