日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】ES2018 新特性: 正则表达式的 s (dotAll) 标志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本章將闡述由 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) 标志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。