亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

ES6正則的擴展實例詳解

2019-11-19 16:44:43
字體:
來源:轉載
供稿:網友

本文實例講述了ES6正則的擴展。分享給大家供大家參考,具體如下:

1. RegExp構造函數

ES5中,RegExp構造函數的參數:

參數是字符串,這時第二個參數表示正則表達式的修飾符(flag)

參數是一個正則表示式,這時會返回一個原有正則表達式的拷貝。但是,ES5不允許此時使用第二個參數,添加修飾符,否則會報錯。

ES6改變了這種行為。如果RegExp構造函數第一個參數是一個正則對象,那么可以使用第二個參數指定修飾符。而且,返回的正則表達式會忽略原有的正則表達式的修飾符,只使用新指定的修飾符。

2. 字符串的正則表達式

字符串對象共有4個方法,可以使用正則表達式:match()、replace()、search()和split()。

ES6將這4個方法,在語言內部全部調用RegExp的實例方法,從而做到所有與正則相關的方法,全都定義在RegExp對象上。

String.prototype.match 調用 RegExp.prototype[Symbol.match]
String.prototype.replace 調用 RegExp.prototype[Symbol.replace]
String.prototype.search 調用 RegExp.prototype[Symbol.search]
String.prototype.split 調用 RegExp.prototype[Symbol.split]

3. u修飾符

ES6對正則表達式添加了u修飾符,含義為“Unicode模式”,用來正確處理大于/uFFFF的Unicode字符。

也就是說,會正確處理四個字節的UTF-16編碼。對于碼點大于0xFFFF的Unicode字符,點字符不能識別,必須加上u修飾符。

ES6新增了使用大括號表示Unicode字符,這種表示法在正則表達式中必須加上u修飾符,才能識別。

//u{61}/.test('a') // false//u{61}/u.test('a') // true//u{20BB7}/u.test('𠮷') // true

①.點字符

點(.)字符在正則表達式中,含義是除了換行符以外的任意單個字符。對于碼點大于0xFFFF的Unicode字符,點字符不能識別,必須加上u修飾符。

var s = '';/^.$/.test(s) // false/^.$/u.test(s) // true

上面代碼表示,如果不添加u修飾符,正則表達式就會認為字符串為兩個字符,從而匹配失敗。

②. 量詞

使用u修飾符后,所有量詞都會正確識別碼點大于0xFFFF的Unicode字符。

/a{2}/.test('aa') // true/a{2}/u.test('aa') // true/ {2}/.test(' ') // false/ {2}/u.test(' ') // true

另外,只有在使用u修飾符的情況下,Unicode表達式當中的大括號才會被正確解讀,否則會被解讀為量詞。

/^/u{3}$/.test('uuu') // true

上面代碼中,由于正則表達式沒有u修飾符,所以大括號被解讀為量詞。加上u修飾符,就會被解讀為Unicode表達式。

③. 預定義模式

u修飾符也影響到預定義模式,能否正確識別碼點大于0xFFFF的Unicode字符。

/S是預定義模式,匹配所有不是空格的字符。只有加了u修飾符,它才能正確匹配碼點大于0xFFFF的Unicode字符。

利用這一點,可以寫出一個正確返回字符串長度的函數。

function codePointLength(text) { var result = text.match(/[/s/S]/gu); return result ? result.length : 0;}var s = '𠮷𠮷';s.length // 4codePointLength(s) // 2

④. i修飾符

有些Unicode字符的編碼不同,但是字型很相近,比如,/u004B與/u212A都是大寫的K。

/[a-z]/i.test('/u212A') // false/[a-z]/iu.test('/u212A') // true

上面代碼中,不加u修飾符,就無法識別非規范的K字符。

4. y修飾符

除了u修飾符,ES6還為正則表達式添加了y修飾符,叫做“粘連”(sticky)修飾符。

y修飾符的作用與g修飾符類似,也是全局匹配,后一次匹配都從上一次匹配成功的下一個位置開始。

不同之處在于,g修飾符只要剩余位置中存在匹配就可,而y修飾符確保匹配必須從剩余的第一個位置開始,這也就是“粘連”的涵義。

var s = 'aaa_aa_a';var r1 = /a+/g;var r2 = /a+/y;r1.exec(s) // ["aaa"]r2.exec(s) // ["aaa"]r1.exec(s) // ["aa"]r2.exec(s) // null

上面代碼有兩個正則表達式,一個使用g修飾符,另一個使用y修飾符。這兩個正則表達式各執行了兩次,第一次執行的時候,兩者行為相同,剩余字符串都是_aa_a。由于g修飾沒有位置要求,所以第二次執行會返回結果,而y修飾符要求匹配必須從頭部開始,所以返回null。

如果改一下正則表達式,保證每次都能頭部匹配,y修飾符就會返回結果了。

var s = 'aaa_aa_a';var r = /a+_/y;r.exec(s) // ["aaa_"]r.exec(s) // ["aa_"]

上面代碼每次匹配,都是從剩余字符串的頭部開始。

使用lastIndex屬性,可以更好地說明y修飾符。

const REGEX = /a/g;// 指定從2號位置(y)開始匹配REGEX.lastIndex = 2;// 匹配成功const match = REGEX.exec('xaya');// 在3號位置匹配成功match.index // 3// 下一次匹配從4號位開始REGEX.lastIndex // 4// 4號位開始匹配失敗REGEX.exec('xaxa') // null

上面代碼中,lastIndex屬性指定每次搜索的開始位置,g修飾符從這個位置開始向后搜索,直到發現匹配為止。

const REGEX = /a/y;// 指定從2號位置開始匹配REGEX.lastIndex = 2;// 不是粘連,匹配失敗REGEX.exec('xaya') // null// 指定從3號位置開始匹配REGEX.lastIndex = 3;// 3號位置是粘連,匹配成功const match = REGEX.exec('xaxa');match.index // 3REGEX.lastIndex // 4

y修飾符同樣遵守lastIndex屬性,但是要求必須在lastIndex指定的位置發現匹配。

進一步說,y修飾符號隱含了頭部匹配的標志^。

/b/y.exec('aba')// null

單單一個y修飾符對match方法,只能返回第一個匹配,必須與g修飾符聯用,才能返回所有匹配。

5. sticky屬性

表示是否設置了y修飾符

var r = /hello/d/y;r.sticky // true

6. flags屬性

ES6為正則表達式新增了flags屬性,會返回正則表達式的修飾符。(和前面是一個逆向的過程)

7. RegExp.escape()

字符串必須轉義,才能作為正則模式。已經有提議將這個需求標準化,作為RegExp對象的靜態方法RegExp.escape()

function escapeRegExp(str) { return str.replace(/[/-/[/]///{/}/(/)/*/+/?/.///^/$/|]/g, '//$&');}let str = '/path/to/resource.html?search=query';escapeRegExp(str)// "http://path//to//resource/.html/?search=query"

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript

正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《ECMAScript6(ES6)入門教程》、《JavaScript正則表達式技巧大全》、《JavaScript字符與字符串操作技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图色老头| 九九九热精品免费视频观看网站| 亚洲国产精彩中文乱码av在线播放| 一区二区三区回区在观看免费视频| 欧美自拍视频在线| 欧美黄色片在线观看| 欧美黑人巨大xxx极品| 欧美丰满老妇厨房牲生活| 日韩欧美在线免费观看| 国产丝袜一区视频在线观看| 亚洲激情中文字幕| 国产精品h片在线播放| 国产精品成av人在线视午夜片| 亚洲性猛交xxxxwww| 91精品国产高清久久久久久久久| 欧美成人三级视频网站| 欧美日韩一区二区在线| 欧美肥臀大乳一区二区免费视频| www.亚洲免费视频| 国产精品免费一区二区三区都可以| 欧美日韩激情视频| 精品国产一区二区三区久久狼黑人| 亚洲国产精品成人一区二区| 久久国产精品久久久久久| 国产亚洲一级高清| 日韩精品久久久久久福利| 国产精品自产拍高潮在线观看| 久久69精品久久久久久久电影好| 亚洲九九九在线观看| 久热精品在线视频| 午夜精品久久久久久久久久久久| 久久久久国产视频| 久久97久久97精品免视看| 日韩欧美一区视频| 国产精品视频网站| 亚洲图片制服诱惑| 欧美巨大黑人极品精男| 日韩电影第一页| 欧美日韩亚洲高清| 俺去啦;欧美日韩| 亚洲精品一区久久久久久| 奇门遁甲1982国语版免费观看高清| 亚洲黄页网在线观看| 亚洲码在线观看| 亚洲天堂久久av| 欧美猛男性生活免费| 精品中文字幕久久久久久| 精品国产户外野外| 91精品国产网站| 国产精品国内视频| 久久av红桃一区二区小说| 亚洲美女av黄| 日韩中文字在线| 992tv在线成人免费观看| 91视频免费网站| 亚洲精品一区二区网址| 亚洲在线免费视频| 91精品久久久久久| 欧美在线日韩在线| 国产精品高潮呻吟久久av野狼| 日韩在线观看网址| 久久久久久久久久久国产| 成人妇女免费播放久久久| 欧美福利视频网站| 国产精品高清在线观看| 北条麻妃在线一区二区| 欧美精品制服第一页| 欧美激情视频一区二区三区不卡| 国产亚洲一区二区在线| 日韩中文在线中文网三级| 亚洲午夜精品久久久久久性色| 欧美一级免费视频| 亚洲国产精品视频在线观看| 欧美在线观看一区二区三区| 亚洲成年人在线| 久久亚洲成人精品| 亚洲精品狠狠操| 国产精品99久久久久久www| 国产精品老牛影院在线观看| 色老头一区二区三区在线观看| 色婷婷av一区二区三区久久| 亚洲一区二区自拍| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美日韩在线一区| 5252色成人免费视频| 欧美成人午夜激情在线| 美日韩精品视频免费看| 国产欧美 在线欧美| 亚洲影视九九影院在线观看| 国产亚洲精品一区二555| 国产精品热视频| 亚洲免费影视第一页| 欧美日韩aaaa| 国产精品久久婷婷六月丁香| 午夜精品一区二区三区在线视| 久久国产精品网站| 国产精品白丝jk喷水视频一区| 91亚洲国产成人久久精品网站| 欧洲亚洲女同hd| 51色欧美片视频在线观看| 韩国一区二区电影| 日韩精品电影网| 国产精品高精视频免费| 亚洲图片欧洲图片av| 色婷婷av一区二区三区久久| 91久久久久久久久久久久久| 亚洲最大福利视频| 亚洲淫片在线视频| 欧美区二区三区| 精品久久中文字幕| 国产视频丨精品|在线观看| 国产一区二区三区在线观看视频| 国产精品久久久精品| 国产精品免费久久久久影院| www.精品av.com| 久久久久久久色| 国产一区二区三区视频免费| 欧美日韩久久久久| 国产在线日韩在线| 亚洲精品中文字幕有码专区| 午夜精品久久久久久久99热| 欧美一级视频一区二区| 亚洲成人精品视频在线观看| 国产一区二区在线免费视频| 国内精品一区二区三区| 久久躁狠狠躁夜夜爽| www.亚洲成人| 中文字幕自拍vr一区二区三区| 日韩美女av在线免费观看| 国产精品视频一| 国产精品女人网站| 久久中文精品视频| 国产91精品久久久| 亚洲国产日韩精品在线| 亚洲色图色老头| 正在播放欧美视频| 国产精品日韩欧美综合| 国产女人精品视频| 中文字幕在线国产精品| 成人字幕网zmw| 久久久影视精品| 在线日韩欧美视频| 69久久夜色精品国产7777| 国产精品mp4| 人人爽久久涩噜噜噜网站| 九九热这里只有在线精品视| 欧美性受xxx| 日本欧美在线视频| 国外成人在线播放| 精品日韩美女的视频高清| 成人免费网站在线看| 91国产在线精品| 97精品国产97久久久久久免费| 午夜免费日韩视频| 91网站免费看| 国产亚洲精品综合一区91| 亚洲男人的天堂在线| 国产精品香蕉国产| 久久影视电视剧免费网站清宫辞电视| 久久精品国产一区二区电影| 一本色道久久88综合亚洲精品ⅰ| 亚洲aⅴ男人的天堂在线观看| 国内精品视频一区| 97在线视频国产|