在以下代码段中,任何人都可以解释reg
如何定义?
str = "This is the first line.\n" +
"This is the second line.\n" +
"This the third line.\n";
reg = /^.*$/gm;
var mtch = str.match(reg);
需要拆分单独一行的三个句子,但我不理解为拆分它而定义的模式。
它说(我猜是这样!)字符串应该开始,.
和.
可以多次出现。当我们实际放置*
时需要放置global flag
?
答案 0 :(得分:3)
“m”标志告诉javascript在换行符的开头和结尾都有^和$ anchors匹配。因此,此正则表达式匹配包含在一行中的任何字符0次或更多次的所有情况(“g”标志)。
答案 1 :(得分:3)
g修饰符仅表示返回所有匹配的字符串
m修饰符最好由the docs解释:
将开始和结束字符(^和$)视为多行(即匹配每行的开头或结尾(由\ 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.", ""]
开始和结束锚点实际上并不是必需的;因为这样一个更简单,几乎等同的正则表达式将是:
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.", ""]
答案 2 :(得分:1)
当我们实际放置全局标志时需要放*?
*
是模式的一部分(用于匹配),g
是一个修饰符,意思是“所有结果,而不仅仅是第一个结果。”
/^.$/m;
会返回一行只包含一个字符(找到的第一个字符)
/^.*$/m;
会返回一行(找到的第一行)
/^.$/gm;
将返回每行只有一个字符
/^.*$/gm;
返回每一行
答案 3 :(得分:0)
点(。)表示任何字符。 *表示0或更多。 'm'修饰符是多行的。