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

資訊專欄INFORMATION COLUMN

ES2018 新特征之:正則表達(dá)式 dotAll 模式

Joyven / 2022人閱讀

摘要:或者使用來(lái)匹配空白字符增加標(biāo)志在最新的規(guī)范中,為的正則表達(dá)式增加了一個(gè)新的標(biāo)志用來(lái)表示。標(biāo)志用于指定多行輸入字符串應(yīng)該被視為多個(gè)行。標(biāo)志只影響和標(biāo)志只影響目前在正則表示中所有修飾符的含義實(shí)現(xiàn)

ES2018 新特性

異步迭代器

正則表達(dá)式反向(lookbehind)斷言

正則表達(dá)式 Unicode 轉(zhuǎn)義

非轉(zhuǎn)義序列的模板字符串

正則表達(dá)式 s/dotAll 模式(本文)

正則表達(dá)式命名捕獲組

對(duì)象展開(kāi)運(yùn)算符

Promise.prototype.finally

“正則表達(dá)式的 s (dotAll) flag” 提案 proposal-regexp-dotall-flag 由 Mathias Bynens 負(fù)責(zé),目前已經(jīng)進(jìn)入 stage 4,并將成為 ES9(ES2018) 的一部分。

1. 概述

在 JavaScript 正則表達(dá)式中 . 用來(lái)匹配任何單個(gè)字符。但是有 2 個(gè)例外:

1.1 多字節(jié) emoji 字符
let regex = /^.$/;
regex.test("?");   // false

我們可以通過(guò)設(shè)置 u 標(biāo)志來(lái)解決,u 的含義是 unicode:

let regex = /^.$/u;
regex.test("?");   // true
1.2 行終結(jié)符(line terminator characters)

行終結(jié)符包含:

U+000A LINE FEED (LF) ( ) - 換行

U+000D CARRIAGE RETURN (CR) ( ) - 回車(chē)

U+2028 LINE SEPARATOR - 行分隔符

U+2029 PARAGRAPH SEPARATOR - 段分隔符

還有一些其它字符,也可以作為一行的開(kāi)始:

U+000B VERTICAL TAB (v)

U+000C FORM FEED (f)

U+0085 NEXT LINE

目前 JavaScript 正則表達(dá)式的 . 可以匹配其中的一部分:

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

在正則表達(dá)式中,用于表示字符串開(kāi)頭和字符串結(jié)尾的元字符是 ^$, 因此一個(gè)變通的方式是使用 ^ 來(lái)匹配。

/foo.bar/.test("foo
bar");     // false
/foo[^]bar/.test("foo
bar");   // true

或者使用 s 來(lái)匹配空白字符:

/foo.bar/.test("foo
bar");     // false
/foo[s]bar/.test("foo
bar");   // true
2. 增加 s/dotAll 標(biāo)志

在最新的 ECMAScript 規(guī)范中,為 JavaScript 的正則表達(dá)式增加了一個(gè)新的標(biāo)志 s 用來(lái)表示 dotAll。以使 . 可以匹配任意字符。

/foo.bar/s.test("foo
bar");    // true

High-level API

const re = /foo.bar/s;  //  等價(jià)于 const re = new RegExp("foo.bar", "s");
re.test("foo
bar");    // true
re.dotAll;      // true
re.flags;       // "s"
3. 命名由來(lái)

既然是為了實(shí)現(xiàn) dotAll 功能,為什么不命名為 d 或者 a。因?yàn)樵谄渌Z(yǔ)言的正則表達(dá)式實(shí)現(xiàn)中,已經(jīng)使用 s 標(biāo)志了:

Java 使用 Pattern.DOTALL

C# 和 VB 使用 RegexOptions.Singleline

Python 同時(shí)支持 re.DOTALLre.S

在支持正則表達(dá)式使用 flag 的語(yǔ)言如 Perl、PHP 也使用 s 作為標(biāo)志。

s 的含義是 singleline 和 dotAll。

singleline(單行)對(duì)應(yīng)的是 multiline(多行)。

m 標(biāo)志用于指定多行輸入字符串應(yīng)該被視為多個(gè)行。如果使用 m 標(biāo)志,^$ 匹配的開(kāi)始或結(jié)束是字符串中的每一行,而不是整個(gè)字符串的開(kāi)始或結(jié)束。

/^java/.test("just
java
");   // false
/^java/m.test("just
java
");  // true

m 標(biāo)志只影響 ^$

s 標(biāo)志只影響 .

目前在 JavaScript 正則表示中所有修飾符的含義:

g → global

i → ignoreCase

m → multiline

y → sticky

u → unicode

s → dotAll

4. 實(shí)現(xiàn)

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/93190.html

相關(guān)文章

  • ES2018 特征:非轉(zhuǎn)義序列的模板字符串

    摘要:新特性異步迭代器正則表達(dá)式反向斷言正則表達(dá)式轉(zhuǎn)義非轉(zhuǎn)義序列的模板字符串本文正則表達(dá)式模式正則表達(dá)式命名捕獲組對(duì)象展開(kāi)運(yùn)算符這個(gè)提案由負(fù)責(zé),目前已經(jīng)進(jìn)入,本提案是的一部分。因此標(biāo)準(zhǔn)移除了對(duì)在帶標(biāo)簽的模版字符串中轉(zhuǎn)義序列的語(yǔ)法限制。 ES2018 新特性 異步迭代器 正則表達(dá)式反向(lookbehind)斷言 正則表達(dá)式 Unicode 轉(zhuǎn)義 非轉(zhuǎn)義序列的模板字符串(本文) 正則表達(dá)式...

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

    摘要:不幸的是,迭代器不能用來(lái)表示這樣的數(shù)據(jù)源。即使是的迭代器也是不夠的,因?yàn)樗氖钱惒降模堑餍枰酱_定狀態(tài)。異步迭代器一個(gè)異步迭代器就像一個(gè)迭代器,除了它的方法返回一個(gè)的。 ES2018 新特性 異步迭代器(本文) 正則表達(dá)式反向(lookbehind)斷言 正則表達(dá)式 Unicode 轉(zhuǎn)義 非轉(zhuǎn)義序列的模板字符串 正則表達(dá)式 s/dotAll 模式 正則表達(dá)式命名捕獲組 對(duì)...

    klivitamJ 評(píng)論0 收藏0
  • ES6學(xué)習(xí) 第五章 正則的擴(kuò)展

    摘要:前言本章介紹正則的擴(kuò)展。屬性屬性表明正則表達(dá)式帶有標(biāo)志。行終止符所謂行終止符,就是該字符表示一行的終結(jié)。比如,只匹配不在美元符號(hào)后面的數(shù)字,要寫(xiě)成。前言本章介紹正則的擴(kuò)展。有些不常用的知識(shí)了解即可。本章原文鏈接:正則的擴(kuò)展RegExp 構(gòu)造函數(shù)從 ES6 開(kāi)始,如果RegExp構(gòu)造函數(shù)第一個(gè)參數(shù)是一個(gè)正則對(duì)象,并且第二個(gè)標(biāo)志存在且為標(biāo)志參數(shù),將不再拋出 TypeError ,將使用這些參數(shù)創(chuàng)...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<