多行模式由标志 m
启用。
它只影响 ^
和 $
的行为。
在多行模式下,它们不仅匹配字符串的开头和结尾,而且还匹配行的开头和结尾。
在行首搜索 ^
在下面的示例中,文本包含多行。模式 /^\d/gm
从每行的开头获取一个数字
let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;
console.log( str.match(/^\d/gm) ); // 1, 2, 3
没有标志 m
只有第一个数字匹配
let str = `1st place: Winnie
2nd place: Piglet
3rd place: Eeyore`;
console.log( str.match(/^\d/g) ); // 1
这是因为默认情况下,插入符号 ^
仅匹配文本开头,在多行模式下,匹配任何行的开头。
请注意
“行开头”正式是指“紧接在换行符之后”:在多行模式下,测试 ^
匹配所有以换行符 \n
开头的位置。
以及文本开头。
在行尾搜索 $
美元符号 $
的行为类似。
正则表达式 \d$
查找每行中的最后一个数字
let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;
console.log( str.match(/\d$/gm) ); // 1,2,3
如果没有标志 m
,美元符号 $
仅匹配整个文本的结尾,因此只会找到最后一个数字。
请注意
“行尾”正式是指“紧接在换行符之前”:在多行模式下,测试 $
匹配所有以换行符 \n
结尾的位置。
以及文本结尾。
搜索 \n 而不是 ^ $
要查找换行符,我们不仅可以使用锚点 ^
和 $
,还可以使用换行符 \n
。
有什么区别?让我们看一个例子。
这里我们搜索 \d\n
而不是 \d$
let str = `Winnie: 1
Piglet: 2
Eeyore: 3`;
console.log( str.match(/\d\n/g) ); // 1\n,2\n
我们可以看到,有 2 个匹配项而不是 3 个。
这是因为 3
后面没有换行符(尽管有文本结尾,所以它匹配 $
)。
另一个区别:现在每个匹配项都包含一个换行符 \n
。与锚点 ^
$
不同,锚点仅测试条件(行的开头/结尾),\n
是一个字符,因此它成为结果的一部分。
因此,模式中的 \n
用于在结果中需要换行符时,而锚点用于查找行开头/结尾的某个东西。
评论
<code>
标签,对于多行,请将它们包装在<pre>
标签中,对于超过 10 行,请使用沙箱(plnkr,jsbin,codepen…)