您现在的位置:首页 >> 前端 >> 内容

s修饰符:dotAll模式运用实例讲解

时间:2018/1/20 13:47:45 点击:

  核心提示:s 修饰符:dotAll 模式正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是行终止符(line terminator character)除外。以下四个字符属于行终止符。U+000A ...

s 修饰符:dotAll 模式

正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是行终止符(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。

但是,很多时候我们希望匹配的是任意单个字符,这时有一种变通的写法。

/foo[^]bar/.test('foo\nbar')

// true

这种解决方案毕竟不太符合直觉,所以现在有一个提案,引入/s修饰符,使得.可以匹配任意单个字符。

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

这被称为dotAll模式,即点(dot)代表一切字符。所以,正则表达式还引入了一个dotAll属性,返回一个布尔值,表示该正则表达式是否处在dotAll模式。

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不冲突,两者一起使用的情况下,.匹配所有字符,而^和$匹配每一行的行首和行尾。

作者:网络 来源:Web先生的博客