Javascript 字符串 regex/.*/gm 不会一次捕获所有行

标签 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."

我做错了什么?

最佳答案

让我以相反的顺序解决这些问题:

What I am doing wrong?

您想使用+,而不是** 表示零个或多个 匹配项,这在这里没有意义。 + 表示一个或多个 匹配项。所以:

"aaa\nbbb\nccc".replace(/.+/g, ".")
// ".\n.\n."

另请注意,如果您不使用 ^$(您的第一个示例),则不需要 m 修饰符(但这不是你在做什么的问题)。而且您不需要 ^$ 因为 . doesn't match newlines (在回答这个问题之前我不知道的事情)。

Why does javascript replace string function do this?

我没有世俗的想法,希望有人知道。

同样,通过使用 *,您说的是零个或多个 匹配项。所以它匹配所有相关字符,用第一个点替换它们;然后它匹配 0 个字符,用一个点替换它们。结果:两个点。

证明:

Live copy | Live source

"aaa\nbbb\nccc".replace(/.*/g, function(m) {
    console.log("m = '" + m + "'");
});

输出:

m = 'aaa'
m = ''
m = 'bbb'
m = ''
m = 'ccc'
m = ''

关于Javascript 字符串 regex/.*/gm 不会一次捕获所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518229/

相关文章:

java - 使用Regex java删除字符串中的换行符

javascript - Jquery 和 JSON : Replace section of JSON array

javascript - 水平滚动不适用于 jquery 单击

字符串中的Javascript递减数

regex - PCRE 正则表达式可以匹配空字符吗?

python - 在python中提取嵌套正则表达式的所有匹配项

javascript - 这个的正则表达式?

javascript - 替换javascript中的某些字符

javascript - 同步 while 循环 JavaScript

javascript - 谷歌地图标记Javascript