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

資訊專(zhuān)欄INFORMATION COLUMN

ECMAScript正則表達(dá)式6個(gè)最新特性

kumfo / 3464人閱讀

摘要:年,添加了對(duì)正則表達(dá)式的支持。這篇博客將介紹正則表達(dá)式的最新特性模式選項(xiàng)斷言規(guī)范遺留特性模式選項(xiàng)這個(gè)特性已經(jīng)在正式發(fā)布了。參考阮一峰入門(mén)博客正則表達(dá)式進(jìn)階指南關(guān)于專(zhuān)注于微信小程序微信小游戲支付寶小程序和實(shí)時(shí)監(jiān)控。

譯者按: 還沒(méi)學(xué)好ES6?ECMAScript 2018已經(jīng)到來(lái)啦!

原文:ECMAScript regular expressions are getting better!

作者: Mathias Bynens: Google V8引擎開(kāi)發(fā)者

譯者:Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

1999年,ECMAScript 3添加了對(duì)正則表達(dá)式的支持。

16年之后,ECMAScript 6(即ECMAScript 2015或者ES6)引入了Unicode模式(u選項(xiàng)), sticky模式(y選項(xiàng))以及RegExp.prototype.flags的getter方法。

這篇博客將介紹ECMAScript正則表達(dá)式的最新特性

dotAll模式(s選項(xiàng))

Lookbehind斷言

Named capture groups

Unicode property escapes

String.prototype.matchAll

規(guī)范RegExp遺留特性

1. dotAll模式(s選項(xiàng))
這個(gè)特性已經(jīng)在ECMAScript 2018正式發(fā)布了。

默認(rèn)情況下,.可以匹配任意字符,除了換行符:

/foo.bar/u.test("foo
bar"); // false

另外,.不能匹配Unicode字符,需要使用u選項(xiàng)啟用Unicode模式才行。

ES2018引入了dotAll模式,通過(guò)s選項(xiàng)可以啟用,這樣,.就可以匹配換行符了。

/foo.bar/su.test("foo
bar"); // true
2. Lookbehind斷言
這個(gè)特性已經(jīng)在ECMAScript 2018正式發(fā)布了。

ECMAScript目前僅支持lookahead斷言。

下面示例是Positive lookahead,匹配字符串“42 dollars”中緊跟著是"dollars"的數(shù)字:

const pattern = /d+(?= dollars)/u;
const result = pattern.exec("42 dollars");
console.log(result[0]); // 打印42

下面示例是Negative lookahead,匹配字符串“42 pesos”中緊跟著的不是"dollars"的數(shù)字:

const pattern = /d+(?! dollars)/u;
const result = pattern.exec("42 pesos");
console.log(result[0]); // 打印42

ES2018添加了lookbehind斷言。

下面示例是Positive lookbehind,匹配字符串“$42”中前面是"$"的數(shù)字:

const pattern = /(?<=$)d+/u;
const result = pattern.exec("$42");
console.log(result[0]); // 打印42

下面示例是Negative lookbehind,匹配字符串“$42”中前面不是是"$"的數(shù)字:

const pattern = /(?

Fundebug專(zhuān)注于網(wǎng)頁(yè)、微信小程序、微信小游戲,支付寶小程序,React Native,Node.js和Java線上BUG實(shí)時(shí)監(jiān)控,歡迎免費(fèi)試用

3. Named capture groups
這個(gè)特性已經(jīng)在ECMAScript 2018正式發(fā)布了。

目前,正則表達(dá)式中小括號(hào)匹配的分組是通過(guò)數(shù)字編號(hào)的:

const pattern = /(d{4})-(d{2})-(d{2})/u;
const result = pattern.exec("2017-01-25");
console.log(result[0]); // 打印"2017-01-25"
console.log(result[1]); // 打印"2017"
console.log(result[2]); // 打印"01"
console.log(result[3]); // 打印"25"

這樣很方便,但是可讀性很差,且不易維護(hù)。一旦正則表達(dá)式中小括號(hào)的順序有變化時(shí),我們就需要更新對(duì)應(yīng)的數(shù)字編號(hào)。

ES2018添加named capture groups, 可以指定小括號(hào)中匹配內(nèi)容的名稱(chēng),這樣可以提高代碼的可讀性,也便于維護(hù)。

const pattern = /(?d{4})-(?d{2})-(?d{2})/u;
const result = pattern.exec("2017-01-25");
console.log(result.groups.year); // 打印"2017"
console.log(result.groups.month); // 打印"01"
console.log(result.groups.day); // 打印"25"
4. Unicode property escapes
這個(gè)特性已經(jīng)在ECMAScript 2018正式發(fā)布了。

Unicode標(biāo)準(zhǔn)為每一個(gè)字符分配了多個(gè)屬性。比如,當(dāng)你要匹配希臘語(yǔ)字符時(shí),則可以搜索Script_Extensions屬性為Greek的字符。

Unicode property escapes使得我們可以使用ECMAScript正則表達(dá)式直接匹配Unicode字符的屬性:

const regexGreekSymbol = /p{Script_Extensions=Greek}/u;
console.log(regexGreekSymbol.test("π")); // 打印true
5. String.prototype.matchAll
這個(gè)特性還處在Stage 3 Draft

g和y選項(xiàng)通常用于匹配一個(gè)字符串,然后遍歷所有匹配的子串,包括小括號(hào)匹配的分組。String.prototype.matchAll讓這個(gè)操作變得更加簡(jiǎn)單了。

const string = "Magic hex numbers: DEADBEEF CAFE 8BADF00D";
const regex = /[0-9a-fA-F]+/g;
for (const match of string.matchAll(regex)) {
    console.log(match);
}

每一個(gè)迭代所返回的match對(duì)象與regex.exec(string)所返回的結(jié)果相同:

// Iteration 1:
[
    "DEADBEEF",
    index: 19,
    input: "Magic hex numbers: DEADBEEF CAFE 8BADF00D"
]

// Iteration 2:
[
    "CAFE",
    index: 28,
    input: "Magic hex numbers: DEADBEEF CAFE 8BADF00D"
]

// Iteration 3:
[
    "8BADF00D",
    index: 33,
    input: "Magic hex numbers: DEADBEEF CAFE 8BADF00D"
]

注意,這個(gè)特性還處在Stage 3 Draft,因此還存在變化的可能性,示例代碼是根據(jù)最新的提案寫(xiě)的。另外,瀏覽器也還沒(méi)有支持這個(gè)特性。String.prototype.matchAll最快可以被加入到ECMAScript 2019中。

6. 規(guī)范RegExp遺留特性
這個(gè)提案還處在Stage 3 Draft

這個(gè)提案規(guī)范了RegExp的遺留特性,比如RegExp.prototype.compile方法以及它的靜態(tài)屬性從RegExp.$1RegExp.$9。雖然這些特性已經(jīng)棄用(deprecated)了,但是為了兼容性我們不能將他們?nèi)ァR虼耍?guī)范這些RegExp遺留特性是最好的方法。因此,這個(gè)提案有助于保證兼容性。

參考

阮一峰 - ECMAScript 6 入門(mén)

Fundebug博客 - JavaScript正則表達(dá)式進(jìn)階指南

ECMAScript 2018: the final feature set

關(guān)于Fundebug

Fundebug專(zhuān)注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了6億+錯(cuò)誤事件,得到了Google、360、金山軟件等眾多知名用戶(hù)的認(rèn)可。歡迎免費(fèi)試用!

版權(quán)聲明

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/08/30/ecmascript-regular-expression-new-features/

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

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

相關(guān)文章

  • 【譯】ECMAScript文檔---序言及1-6章(上)

    摘要:隨后,它出現(xiàn)在公司之后的瀏覽器,以及從微軟從起發(fā)布的所有瀏覽器上。標(biāo)準(zhǔn)的第版在年月的大會(huì)上被表決接受。第版在年月底大會(huì)上被采納。 前言 ??本系列譯文的初衷旨在希望更多人能夠了解關(guān)于JS的一些基本概念,遇到原理性的問(wèn)題時(shí)多去翻翻文檔,而不是在社區(qū)無(wú)休止的重復(fù)提出某些在文檔中能夠非常方便快捷就能找到的東西。 ??精力和水平有限,所以暫時(shí)只打算嘗試翻譯前面幾章概括性的介紹,同時(shí)后面的章節(jié)大...

    wind3110991 評(píng)論0 收藏0
  • ECMAScript 5.1 實(shí)用特性概覽

    摘要:返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。方法測(cè)試數(shù)組中的某些元素是否通過(guò)了指定函數(shù)的測(cè)試,返回值非常實(shí)用的功能,判斷數(shù)組中是否某元素符合特定條件。 ECMAScript 5發(fā)布于2009年12月。ECMAscript 5.1版(下文稱(chēng)ES5)發(fā)布于2011年6月,,并且成為ISO國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011) http://www.ecma...

    xiao7cn 評(píng)論0 收藏0
  • ECMAScript 5.1 實(shí)用特性概覽

    摘要:返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。方法測(cè)試數(shù)組中的某些元素是否通過(guò)了指定函數(shù)的測(cè)試,返回值非常實(shí)用的功能,判斷數(shù)組中是否某元素符合特定條件。 ECMAScript 5發(fā)布于2009年12月。ECMAscript 5.1版(下文稱(chēng)ES5)發(fā)布于2011年6月,,并且成為ISO國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011) http://www.ecma...

    bang590 評(píng)論0 收藏0
  • ECMAScript6特性——“正則的擴(kuò)展”

    摘要:第二個(gè)參數(shù)指定修飾符,如果存在則使用指定的修飾符。屬性表示是否設(shè)置了修飾符屬性的屬性返回正則表達(dá)式的正文的屬性返回正則表達(dá)式的修飾符字符串必須轉(zhuǎn)義,才能作為正則模式。 1 RegExp構(gòu)造函數(shù) ES6 允許RegExp構(gòu)造函數(shù)接受正則表達(dá)式作為參數(shù)。第二個(gè)參數(shù)指定修飾符,如果存在則使用指定的修飾符。 var regexp = new RegExp(/xyz/i, ig); consol...

    Shisui 評(píng)論0 收藏0
  • 細(xì)解JavaScript ES7 ES8 ES9 新特性

    摘要:定期召開(kāi)會(huì)議,會(huì)議由會(huì)員公司的代表與特邀專(zhuān)家出席。新版本將會(huì)包含每年截止時(shí)間之前完成的所有特性。它引入了一個(gè)新的構(gòu)造函數(shù)和具有輔助函數(shù)的命名空間對(duì)象。 導(dǎo)言:ECMAScript的演化不會(huì)停止,但是我們完全沒(méi)必要害怕。除了ES6這個(gè)史無(wú)前例的版本帶來(lái)了海量的信息和知識(shí)點(diǎn)以外,之后每年一發(fā)的版本都僅僅帶有少量的增量更新,一年更新的東西花半個(gè)小時(shí)就能搞懂了,完全沒(méi)必要畏懼。本文將帶您花大約...

    Youngs 評(píng)論0 收藏0

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

0條評(píng)論

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