全局、多行匹配
g 修饰符只是意味着返回所有匹配的字符串
m 修饰符最好由文档解释:
将开始和结束字符(^ 和 $)视为处理多行(即,匹配每行的开始或结束(由 \n 或 \r 分隔),而不仅仅是整个输入字符串的开始或结束)
因此,问题中的正则表达式匹配换行符之间的所有字符串。
str = "This is the first line.\n" +
"This is the second line.\n" +
"This the third line.\n";
str.match(/^.*$/gm)
//["This is the first line.", "This is the second line.", "This the third line.", ""]
不需要 m 修饰符
开始和结束锚点实际上不是必需的。因此,一个更简单、几乎等效的正则表达式将是:
str.match(/.+/g)
//["This is the first line.", "This is the second line.", "This the third line."]
在这种情况下,.+
将匹配一个或多个字符的任何字符串,不包括换行符。默认情况下,正则表达式中的匹配是贪婪的,并且会扩展以匹配最可能的匹配,因此它将字符串拆分为行。请注意,响应中没有空字符串。
这不需要正则表达式
为了这个正则表达式看起来在做什么,最好不要使用正则表达式:
str.split("\n");
//["This is the first line.", "This is the second line.", "This the third line.", ""]