摘要:或者使用來匹配空白字符增加標志在最新的規范中,為的正則表達式增加了一個新的標志用來表示。標志用于指定多行輸入字符串應該被視為多個行。標志只影響和標志只影響目前在正則表示中所有修飾符的含義實現
ES2018 新特性
異步迭代器
正則表達式反向(lookbehind)斷言
正則表達式 Unicode 轉義
非轉義序列的模板字符串
正則表達式 s/dotAll 模式(本文)
正則表達式命名捕獲組
對象展開運算符
Promise.prototype.finally
“正則表達式的 s (dotAll) flag” 提案 proposal-regexp-dotall-flag 由 Mathias Bynens 負責,目前已經進入 stage 4,并將成為 ES9(ES2018) 的一部分。
1. 概述在 JavaScript 正則表達式中 . 用來匹配任何單個字符。但是有 2 個例外:
1.1 多字節 emoji 字符let regex = /^.$/; regex.test("?"); // false
我們可以通過設置 u 標志來解決,u 的含義是 unicode:
let regex = /^.$/u; regex.test("?"); // true1.2 行終結符(line terminator characters)
行終結符包含:
U+000A LINE FEED (LF) ( ) - 換行
U+000D CARRIAGE RETURN (CR) ( ) - 回車
U+2028 LINE SEPARATOR - 行分隔符
U+2029 PARAGRAPH SEPARATOR - 段分隔符
還有一些其它字符,也可以作為一行的開始:
U+000B VERTICAL TAB (v)
U+000C FORM FEED (f)
U+0085 NEXT LINE
目前 JavaScript 正則表達式的 . 可以匹配其中的一部分:
let regex = /./; regex.test(" "); // false regex.test(" "); // false regex.test("u{2028}"); // false regex.test("u{2029}"); // false regex.test("v"); // true regex.test("f"); // true regex.test("u{0085}"); // true
在正則表達式中,用于表示字符串開頭和字符串結尾的元字符是 ^ 和 $, 因此一個變通的方式是使用 ^ 來匹配。
/foo.bar/.test("foo bar"); // false /foo[^]bar/.test("foo bar"); // true
或者使用 s 來匹配空白字符:
/foo.bar/.test("foo bar"); // false /foo[s]bar/.test("foo bar"); // true2. 增加 s/dotAll 標志
在最新的 ECMAScript 規范中,為 JavaScript 的正則表達式增加了一個新的標志 s 用來表示 dotAll。以使 . 可以匹配任意字符。
/foo.bar/s.test("foo bar"); // true
High-level API
const re = /foo.bar/s; // 等價于 const re = new RegExp("foo.bar", "s"); re.test("foo bar"); // true re.dotAll; // true re.flags; // "s"3. 命名由來
既然是為了實現 dotAll 功能,為什么不命名為 d 或者 a。因為在其它語言的正則表達式實現中,已經使用 s 標志了:
Java 使用 Pattern.DOTALL
C# 和 VB 使用 RegexOptions.Singleline
Python 同時支持 re.DOTALL 和 re.S
在支持正則表達式使用 flag 的語言如 Perl、PHP 也使用 s 作為標志。
s 的含義是 singleline 和 dotAll。
singleline(單行)對應的是 multiline(多行)。
m 標志用于指定多行輸入字符串應該被視為多個行。如果使用 m 標志,^ 和 $ 匹配的開始或結束是字符串中的每一行,而不是整個字符串的開始或結束。
/^java/.test("just java "); // false /^java/m.test("just java "); // true
m 標志只影響 ^ 和 $
s 標志只影響 .
目前在 JavaScript 正則表示中所有修飾符的含義:
g → global
i → ignoreCase
m → multiline
y → sticky
u → unicode
s → dotAll
4. 實現V8 - Chrome 62
JavaScriptCore - Safari Technology Preview 39a
XS, shipping in Moddable as of the January 17, 2018 update
regexpu (transpiler) with the { dotAllFlag: true } option enabled
online demo
Babel plugin
Compat-transpiler of RegExp Tree
Babel plugin
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93190.html
摘要:新特性異步迭代器正則表達式反向斷言正則表達式轉義非轉義序列的模板字符串本文正則表達式模式正則表達式命名捕獲組對象展開運算符這個提案由負責,目前已經進入,本提案是的一部分。因此標準移除了對在帶標簽的模版字符串中轉義序列的語法限制。 ES2018 新特性 異步迭代器 正則表達式反向(lookbehind)斷言 正則表達式 Unicode 轉義 非轉義序列的模板字符串(本文) 正則表達式...
摘要:不幸的是,迭代器不能用來表示這樣的數據源。即使是的迭代器也是不夠的,因為它的是異步的,但是迭代器需要同步確定狀態。異步迭代器一個異步迭代器就像一個迭代器,除了它的方法返回一個的。 ES2018 新特性 異步迭代器(本文) 正則表達式反向(lookbehind)斷言 正則表達式 Unicode 轉義 非轉義序列的模板字符串 正則表達式 s/dotAll 模式 正則表達式命名捕獲組 對...
摘要:前言本章介紹正則的擴展。屬性屬性表明正則表達式帶有標志。行終止符所謂行終止符,就是該字符表示一行的終結。比如,只匹配不在美元符號后面的數字,要寫成。前言本章介紹正則的擴展。有些不常用的知識了解即可。本章原文鏈接:正則的擴展RegExp 構造函數從 ES6 開始,如果RegExp構造函數第一個參數是一個正則對象,并且第二個標志存在且為標志參數,將不再拋出 TypeError ,將使用這些參數創...
閱讀 667·2021-11-24 09:39
閱讀 2332·2021-11-22 13:54
閱讀 2204·2021-09-23 11:46
閱讀 3250·2019-08-30 15:55
閱讀 2685·2019-08-30 15:54
閱讀 2410·2019-08-30 14:18
閱讀 1550·2019-08-29 14:15
閱讀 2738·2019-08-29 13:49