摘要:或者使用來(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("?"); // true1.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"); // true2. 增加 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.DOTALL 和 re.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
摘要:新特性異步迭代器正則表達(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á)式...
摘要:不幸的是,迭代器不能用來(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ì)...
摘要:前言本章介紹正則的擴(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)...
閱讀 674·2021-11-24 09:39
閱讀 2342·2021-11-22 13:54
閱讀 2210·2021-09-23 11:46
閱讀 3256·2019-08-30 15:55
閱讀 2691·2019-08-30 15:54
閱讀 2415·2019-08-30 14:18
閱讀 1554·2019-08-29 14:15
閱讀 2745·2019-08-29 13:49