Jul*_*ito 5 javascript regex replace
为什么javascript替换字符串函数这样做?
"aaa\nbbb\nccc".replace(/.*/gm, ".")
// result = "..\n..\n.." but expected was: ".\n.\n."
"aaa\nbbb\nccc".replace(/^.*/gm, ".")
// result = ".\n.\n." -> OK!!!
"aaa\nbbb\nccc".replace(/.*$/gm, ".")
// result = "..\n..\n.." but expected was: ".\n.\n."
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
让我以相反的顺序解决这些问题:
我做错了什么?
你想要使用+,而不是*.*意味着零或多个匹配,这在这里没有意义.+表示一个或多个匹配.所以:
"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您不使用^或$(您的第一个示例),则不需要m修饰符(但这不是您正在做的事情的问题).并且您不需要^或$因为. 不符合换行符(在回答此问题之前我不知道的事情).
为什么javascript替换字符串函数这样做?
我没有地球上的想法,希望别人能做到.
再次,通过使用*你说零或更多匹配.所以它匹配所有相关的字符,用第一个点替换它们; 然后它匹配零个字符,用一个点替换它们.结果:两个点.
证明:
"aaa\nbbb\nccc".replace(/.*/g, function(m) {
console.log("m = '" + m + "'");
});
Run Code Online (Sandbox Code Playgroud)
输出:
m = 'aaa' m = '' m = 'bbb' m = '' m = 'ccc' m = ''