正则表达式 dotAll 模式

正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是有两个例外。一个是四个字节的 UTF-16 字符,这个可以用 u 修饰符解决;另一个是行终止符(line terminator character)。

所谓行终止符,就是该字符表示一行的终结。以下四个字符属于“行终止符”。

  • U+000A 换行符(\n
  • U+000D 回车符(\r
  • U+2028 行分隔符(line separator)
  • U+2029 段分隔符(paragraph separator)
;/foo.bar/.test('foo\nbar')
// false

上面代码中,因为.不匹配\n,所以正则表达式返回 false

S2018 引入 s 修饰符,使得.可以匹配任意单个字符。

;/foo.bar/s.test('foo\nbar') // true

这被称为 dotAll 模式,即点(dot)代表一切字符。

dotAll 是一个只读的属性,属于单个正则表达式实例。如果使用了 s 修饰符,dotAll 的值将返回 Boolean 类型的 true,否则将返回 false

const re = /foo.bar/s
// 另一种写法
// const re = new RegExp('foo.bar', 's');

re.test('foo\nbar') // true
re.dotAll // true
re.flags // 's'

/s 修饰符和多行修饰符/m 不冲突,两者一起使用的情况下,.匹配所有字符,而^$匹配每一行的行首和行尾。

Copyright © 零度实验室 2020 all right reserved,powered by Gitbook修订时间: 2021-07-02 10:46:52

results matching ""

    No results matching ""