专门为初学者编写的正则表达式入门教程

2020-05-10 20:00:16王振洲

9.3 多行模式修饰符(m)

有限支持

在 Ruby 中,m 修饰符是执行其他的函数。

多行修饰符与正在在处理包含换行符的“多行”字符串时对锚点的处理有关。默认情况下,/^foo$/只匹配 “foo”。

我们可能希望它在多行字符串中的一行也能匹配 foo。

我们拿 "barnfoonbaz" 举例子:

bar foo baz

如果没有 m 修饰符,上面的字符串会被当做单行 barnfoonbaz, 正则表达式 ^foo$ 匹配不到任何字符。

如果有 m 修饰符,上面的字符串会被当做 3 行。 ^foo$ 可以匹配到中间那一行。

9.4 Dot-all修饰符 (s)

有限支持

ES2018 之前的 JavaScript 不支持这个修饰符。 Ruby 也不支持这个修饰,而是用 m 表示。

.通常匹配除换行符以外的任何字符。使用dot all修饰符后,它也可以匹配换行符。

10 锚点

锚点本身不匹配任何东西。但是,他们会限制匹配出现的位置。

你可以把锚点当做是 "不可见的字符"。

10.1 行首 ^

在正则开始时插入^ 号,使正则其余部分必须从字符串开始的地方匹配。你可以把它当成始终要在字符串开头匹配一个不可见的字符。

/^p/g

10.2 行尾

在正则结尾时插入$ 号, 类似于行首符。你可以把它当成始终要在字符串结尾匹配一个不可见的字符。

/p$/g

^$锚点经常一起使用,以确保正则和字符串整个匹配,而不仅仅是部分匹配。

/^p$/g

让我们回顾一下重复中的一个例子,并在正则的末尾添加两个锚点。

/^https?$/g

如果没有这 2 个锚点, http/2shttp 也会被匹配。

10.3 字边界 b

字边界是一个字符和非词字符之间的位置。

字边界锚点 b,匹配字符和非词字符之间存在的假想不可见字符。

/bp/g

提示

字符包括 a-z, A-Z