国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES2018 新特征之:正則表達式 dotAll 模式

Joyven / 2018人閱讀

摘要:或者使用來匹配空白字符增加標志在最新的規范中,為的正則表達式增加了一個新的標志用來表示。標志用于指定多行輸入字符串應該被視為多個行。標志只影響和標志只影響目前在正則表示中所有修飾符的含義實現

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("?");   // true
1.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");   // true
2. 增加 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.DOTALLre.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 特征:非轉義序列的模板字符串

    摘要:新特性異步迭代器正則表達式反向斷言正則表達式轉義非轉義序列的模板字符串本文正則表達式模式正則表達式命名捕獲組對象展開運算符這個提案由負責,目前已經進入,本提案是的一部分。因此標準移除了對在帶標簽的模版字符串中轉義序列的語法限制。 ES2018 新特性 異步迭代器 正則表達式反向(lookbehind)斷言 正則表達式 Unicode 轉義 非轉義序列的模板字符串(本文) 正則表達式...

    stackfing 評論0 收藏0
  • ES2018 特征:異步迭代器 for-await-of

    摘要:不幸的是,迭代器不能用來表示這樣的數據源。即使是的迭代器也是不夠的,因為它的是異步的,但是迭代器需要同步確定狀態。異步迭代器一個異步迭代器就像一個迭代器,除了它的方法返回一個的。 ES2018 新特性 異步迭代器(本文) 正則表達式反向(lookbehind)斷言 正則表達式 Unicode 轉義 非轉義序列的模板字符串 正則表達式 s/dotAll 模式 正則表達式命名捕獲組 對...

    klivitamJ 評論0 收藏0
  • ES6學習 第五章 正則的擴展

    摘要:前言本章介紹正則的擴展。屬性屬性表明正則表達式帶有標志。行終止符所謂行終止符,就是該字符表示一行的終結。比如,只匹配不在美元符號后面的數字,要寫成。前言本章介紹正則的擴展。有些不常用的知識了解即可。本章原文鏈接:正則的擴展RegExp 構造函數從 ES6 開始,如果RegExp構造函數第一個參數是一個正則對象,并且第二個標志存在且為標志參數,將不再拋出 TypeError ,將使用這些參數創...

    番茄西紅柿 評論0 收藏2637

發表評論

0條評論

Joyven

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<