本章将阐述由 Mathias Bynens 提出的提案——用于正则表达式的 “s (dotAll)“ 标志。

概述

目前,正则表达式中的点(.)无法匹配换行符:

> /^.$/.test('\n')
false
复制代码

本提案指定的正则表达式标志 /s 可以改变现状:

> /^.$/s.test('\n')
true
复制代码

正则表达式中的点(.)的限制

正则表达式中的点(.)有两个限制。

首先,它不能匹配星体(非 BMP)字符,例如 emoji:

> /^.$/.test('?')
false
复制代码

这个可以利用 /u 标志来解决:

> /^.$/u.test('?')
true
复制代码

第二,它不能匹配换行符:

> /^.$/.test('\n')
false
复制代码

这个目前只能通过用其他标志替换 . 来解决,例如 [^] (”非空字符“)或者 [\s\S] (”空格或非空格“)。

> /^[^]$/.test('\n')
true
> /^[\s\S]$/.test('\n')
true
复制代码

ECMAScript 中可被识别的换行符

ECMAScript 的 换行符 产生的影响:

  • 点(.),在所有正则表达式中都没有 /s 这个标志。
  • ^$ ,当标志 /m (multiline) 被使用的时候。

在 ECMAScript 中被认为是换行符的字符有:

  • U+000A 换行(LF)(\n)
  • U+000D 回车(CR)(\r)
  • U+2028 行分隔符
  • U+2029 段落分隔符

此外,还有一些类似于换行的字符在 ECMAScript 中不被认为是换行符:

  • U+000B 垂直制表符 (\v)
  • U+000C 换页符 (\f)
  • U+0085 下一行

这三个字符不需要其他标志就可以被 . 匹配:

> /^...$/.test('\v\f\u{0085}')
true
复制代码

提案

该提案引进正则表达式标志 /s (“singleline”的缩写),使得 . 可以匹配换行符:

> /^.$/s.test('\n')
true
复制代码

/s 的全名是 dotAll ,该属性表示是否使用了 s 标志:

> /./s.dotAll
true
> /./s.flags
's'
> new RegExp('.', 's').dotAll
true
> /./.dotAll
false
复制代码

dotAll vs. multiline

  • dotAll 只影响 .
  • multiline 只影响 ^$

常见问题

为什么这个标志被命名为 /s

既然 dotAll 可以很好的描述标志的作用,那么为什么不用 /a 或者 /d 命名呢?因为 /s 这个名称在其他语言的正则表达式中已被广泛应用(包括 Perl、Python、Java、c#、…)。

评论


原文:http://exploringjs.com/es2018-es2019/ch_regexp-dotall-flag.html
译者:杜亨莉

【译】ES2018 新特性: 正则表达式的 s (dotAll) 标志相关推荐

  1. Oracle 10g新特性——正则表达式(转)

    Oracle 10g新特性--正则表达式 作者: fuyuncat 来源: www.HelloDBA.com 在进行查询时,有时候需要按照一定的特殊规则来查找某个字符串,比如,你可能需要查询第三位为5 ...

  2. ES9新特性_ES9正则扩展-dotAll模式---JavaScript_ECMAScript_ES6-ES11新特性工作笔记056

    然后我们再来看一下这个,es9中对,正则表达式的扩展 dotAll的模式. 首先我们有这样的文本,一个<ul>,这样 然后我们要从里面获取a标签里面的内容,比如和上映日期. 可以看到上面这 ...

  3. [译]ES6新特性:八进制和二进制整数字面量

    原文:http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binar ...

  4. [转]ES7、ES8、ES9、ES10新特性大盘点

    ES7.ES8.ES9.ES10新特性大盘点 本文转自:https://mp.weixin.qq.com/s/8bov6788ivV0sHzmwrn5lw 以下文章来源于前端工匠 ,作者浪里行舟君 前 ...

  5. ES7、ES8、ES9、ES10新特性大盘点

    前言 从 ECMAScript 2016(ES7)开始,版本发布变得更加频繁,每年发布一个新版本,好在每次版本的更新内容并不多,本文会细说这些新特性,尽可能和旧知识相关联,帮你迅速上手这些特性. ES ...

  6. 应用广泛的语言ECMAScript 2018来了,新特性都在这里

    原文:What's new in ECMAScript 2018 作者:Paul Krill 翻译:不二 译者注:ECMAScript是应用广泛的语言,它常常被称为JavaScript或JScript ...

  7. MongoDB 5.0新特性概览

    简介:MongoDB 5.0标志着一个新的发布周期的到来,以更快地交付新特性给到用户.版本化API与在线重新分片相结合,使用户不必担心未来的数据库升级以及业务变化问题:本地原生时间序列数据平台也使Mo ...

  8. HTML5新特性---Form表单前台通过正则表达式自动验证邮箱

    在HTML5中Form表单中添加了许多新特性,下面为大家介绍一种form表单中的新属性pattern. pattern 属性规定用于验证 input 域的模式(pattern),模式(pattern) ...

  9. api es7 删除所有数据_【译】ECMAScript 2016 (ES7) 新特性一览

    本文回答了关于下一版 JavaScript(ECMAScript 2016)的以下几个问题: 谁在设计? 如何设计? 会有什么特性? 本文会持续更新以及时反馈最新进展. 1.谁在设计 ECMAScri ...

最新文章

  1. Sqlserver 错误日志太大导致硬盘空间不足
  2. (Windows Maven项目)Redis数据库的安装和操作实现
  3. 我们常用的 Integer 内部为什么会去实现 Comparable 接口?
  4. JavaScript中的工厂函数vs构造函数vs class
  5. 启动php服务命令,启动|停止服务
  6. 六十九、Springboot整合JDBC,连接Mysql
  7. spyder开多个程序_【程序源代码】基于Vue+ElementUI web开发框架
  8. CMFCRibbonStatusBar中添加图片按钮
  9. springboot之session、cookie
  10. C++11学习 新特性之 “=default” 、“=delete”
  11. pythonselenium一个简单的自动化测试实战:百度搜索
  12. python selenium 打开新窗口
  13. vs2013 mfc资源在另一个编辑器中打开
  14. (转)国外优秀区块链创业公司梳理
  15. 三菱驱动器参数表_三菱伺服驱动器参数都设置什么啊 详细点 谢谢
  16. Linux串口应用编程详解(Serial)
  17. mysql 删除时间一个星期_我用财务管理系统花费一天时间做账,别人用一个星期也追赶不上...
  18. SitePoint播客#71:不断发展的互联网
  19. 分析师不死心 仍坚信微软终将成功并购雅虎
  20. 整理任正非思想:英雄好汉站出来-1995

热门文章

  1. ogg 故障解决一则
  2. android byte[]与图片的转换
  3. iphone SHSH证书
  4. C++中变量使用前一定要初始化
  5. 深度学习端上部署工具
  6. python实现点到平面的距离
  7. 系列(九)—TCP/UDP协议
  8. SDNU 1093.DNA排序(水题)
  9. 博客园使用highlight.js对代码进行高亮,并实现自定义关键词高亮
  10. 这是mac 重置mysql 的三种做法