/**
* created by z18630 on 2018/12/10 0010.
*///第五章 正則的擴充套件
//regexp建構函式
//使用第二個引數新增修飾符,且覆蓋原有的
console.log(new regexp(/abc/ig, 'i').flags); //i
console.log('------------------------');
//字串的正則方法
//match():使用指定的正規表示式進行查詢,以陣列的形式返回符合要求的字串
// 定義在字串上,引數為正規表示式
let s1 = 'aaabbaaaccc1234aaaccc';
console.log(s1.match(/aa/)); //[ 'aa',index: 0,: 'aaabbaaaccc1234aaaccc',groups: undefined ]
console.log(s1.match(/[a-z]/g)); //全域性匹配,返回所有匹配字串
// [ 'aaa', 'bba', 'aac', 'aaa', 'ccc' ]
//exec():使用指定的正規表示式進行查詢,以陣列的形式返回符合要求的字串
// 返回第乙個匹配的字串,還可返回子字表示式匹配的字串
// 定義在正規表示式上,引數為字串
console.log(/ccc([0-9]+)aaa/g.exec(s1));
// [ 'ccc1234aaa',
// '1234',
// index: 8,
// input: 'aaabbaaaccc1234aaaccc',
// groups: undefined ]
//test():匹配到返回true,未匹配到返回false
console.log(/ccc([0-9]+)aaa/g.test(s1)); //true
//search():返回第乙個匹配的字串的所在位置
// console.log(s1.match(/[b-z]/g)); //[ 'ccc', 'ccc' ]
//replace():替換掉匹配的字串
console.log(s1.replace(/[b-z]/g, 'zzz')); //aaabbaaazzz1234aaazzz
//split():返回匹配到的字串作為分隔符的陣列
let s2 = 'aa!dd@jj&k,s';
console.log(s2.split(/[!@&,]/, 3)); //第二個引數為返回陣列元素的個數 //[ 'aa', 'dd', 'jj' ]
console.log('---------------------');
//u修飾符
console.log(/^\ud83d/u.test('\ud83d\udc2a')); //加了u修飾符,能識別大於\uffff的字元,
//即能識別4個位元組的utf-16編碼,識別為乙個字元
//false
console.log(/^\ud83d/.test('\ud83d\udc2a')); //true
console.log(/^.$/u.test('\ud83d\udc2a')); //識別為乙個字元 //true
console.log(/^.$/.test('\ud83d\udc2a')); //false
console.log(/\u/u.test('a')); //大括號的unicode表示加u才能識別 //true
console.log('---------------------');
//y修飾符:粘連修飾符
//和g修飾符的區別,g修飾符只要剩餘位置存在匹配就行,y修飾符會確保匹配必須從剩餘位置的第乙個字元開始
let s = 'aaa_aa_a';
console.log(s.match(/a+/g)); //[ 'aaa', 'aa', 'a' ]
console.log(s.match(/a+/yg)); //匹配到第乙個aaa後,後面的字元第乙個位置為_,無法繼續匹配 //['aaa']
console.log(s.match(/a+_/g));// [ 'aaa_', 'aa_' ]
console.log(s.match(/a+_/yg)); //[ 'aaa_', 'aa_' ]
//sticky屬性:是否設定了y修飾符
console.log(/a+_/yg.sticky); //true
//source屬性:返回表示式的正文
console.log(/a+_/yg.source); //a+_
//flags屬性:返回表示式的修飾符
console.log(/a+_/yg.flags); //gy
console.log('---------------------');
//斷言rorath
//先行斷言:x只在y前面才匹配,寫成/x(?=y)/
//先行否定斷言:x只有不在y前面才匹配,寫成/x(?!y)/
console.log(/\d+(?=%)/.exec('1 20%a')); //括號中的部分不計入返回結果
//[ '20', index: 2, input: '1 20%a', groups: undefined ]
console.log(/\d+(?!%)/.exec('1 20%a'));
//[ '1', index: 0, input: '1 20%a', groups: undefined ]
//後行斷言:x只有在y後面才匹配,/(?<=y)x/
//後行否定斷言:x只有不在y後面才匹配,寫成/(?\d)-(?\d)-(?\d)/;
// const } = re.exec('1991-12-31');
// console.log(years);
ES6學習 正則的擴充套件
字串物件共有 4 個方法,可以使用正規表示式 match replace search 和split es6 將這 4 個方法,在語言內部全部呼叫regexp的例項方法,從而做到所有與正則相關的方法,全都定義在regexp物件上 string.prototype.match 呼叫 regexp.pr...
ES6 正則的擴充套件
一,regexp 建構函式 es5中,regexp建構函式的引數有兩種情況。1,引數是字串,第二個引數表示正規表示式的修飾符 flag 2,引數是乙個正規表示式,返回乙個原有正規表示式的拷貝。es6中,如果regexp建構函式第乙個引數是乙個正則物件,那麼可以使用第二個引數指定修飾符。而且,返回的正...
ES6精華 正則擴充套件
本篇概括了es6中正規表示式新增部分的精華要點 最好有es5的基礎 使正則處於unicode模式。關於es6的字元擴充套件知識,可檢視這裡。處於unicode模式下的正則,可以正確識別32位 四位元組 字元。let c ud83d udc2a 32位字元 console.log s test c f...