1俱笛、ES6 RegExp 構(gòu)造函數(shù)表示形式
在ES5 中,RegExp構(gòu)造函數(shù)的參數(shù)有兩種表示方式:
// 第一個(gè)參數(shù)為字符串足陨,第二個(gè)參數(shù)為修飾符
var regexp = new RegExp("yuan", "i");
console.log(regexp); // /yuan/i
// 參數(shù)是正則表達(dá)式
var regexp = new RegExp(/yuan/i);
console.log(regexp); // /yuan/i
在ES6中嫂粟,第一個(gè)參數(shù)可以是正則表達(dá)式,第二個(gè)參數(shù)是修飾符:
var regexp = new RegExp(/yuan/gi, "i");
console.log(regexp); // /yuan/i
console.log(regexp.flags); // i
從上面代碼可以看出墨缘,在ES6中星虹,第二個(gè)參數(shù)修飾改變了正則表示的flags 屬性。
2镊讼、字符串的正則方法
匹配目標(biāo)字符串:math()
表達(dá)式: regexpSymbol.math;
str: 是指匹配的目標(biāo)字符串
返回值:一個(gè)數(shù)組(包括整個(gè)匹配結(jié)果和通過捕獲組匹配到的結(jié)構(gòu))宽涌,如果沒有匹配值,這返回null蝶棋。
var reg = /a/g;
var str = "yuan is an animal";
result = reg[Symbol.match](str);
console.log(result); // ["a", "a", "a", "a"]
這個(gè)方法是在String.prototype.match() 的內(nèi)部調(diào)用卸亮,等同于下面返回的結(jié)果。
console.log("yuan is an animal".match(/a/g)); // ["a", "a", "a", "a"]
這兩方法不同之處在于this 和 參數(shù)順序玩裙。
替換字符串: replace()
表達(dá)式:regexp[Symbol.replace](str, newSubStr | function)
str:正則替換的目標(biāo)字符串兼贸;
newSubStr:替換的字符串;
function:生成新的子字符串的回調(diào)函數(shù)替換器吃溅。
返回值:替換后的新字符串溶诞。
var reg = /-/g;
var str = "2017-12-28";
result = reg[Symbol.replace](str, '.');
console.log(result); // 2017.12.28
這個(gè)方法是在String.prototype.replace() 的內(nèi)部調(diào)用,等同于下面返回的結(jié)果决侈。
console.log("yuan is an animal".replace(/\s/g, ",")); // yuan,is,an,animal
這兩方法不同之處在于this 和 參數(shù)順序螺垢。
搜索目標(biāo)字符串:search()
表達(dá)式:regexpSymbol.search;
str:搜索的目標(biāo)字符串;
返回值: 返回的是第一個(gè)匹配項(xiàng)在目標(biāo)字符串的位置索引赖歌,若查詢不到則返回 -1枉圃;
var reg = /a/g;
var str = "yuan is an animal";
result = reg[Symbol.search](str);
console.log(result); // 2
這個(gè)方法是在String.prototype.search() 的內(nèi)部調(diào)用的,與下面輸出的結(jié)構(gòu)相同庐冯;
var reg = /a/g;
var str = "yuan is an animal";
res = str.search(reg);
console.log(res); // 2
這兩方法不同之處在于this 和 參數(shù)順序孽亲。
切割字符串:split()
表達(dá)式:regexp[Symbol.split](str[, limit])
str:切割操作的目標(biāo)字符串;
limit:可選展父,限制切割數(shù)量墨林,為整型值赁酝;
返回值:切割后的字符串?dāng)?shù)組。
var reg = /-/g;
var str = "2017-12-28";
result = reg[Symbol.split](str);
console.log(result); // ["2017", "12", "28"]
result2 = reg[Symbol.split](str, 2);
console.log(result2); // ["2017", "12"]
這個(gè)方法是在String.prototype.split() 的內(nèi)部調(diào)用的旭等,與下面輸出的結(jié)構(gòu)相同;
var reg = /-/g;
var str = "2017-12-28";
res = str.split(reg);
console.log(res); // ["2017", "12", "28"]
這兩方法不同之處在于this 和 參數(shù)順序衡载。
3搔耕、u 修飾符
前面章節(jié)說過,ES5中不能處理4字節(jié)的utf-16 編碼痰娱。u 修飾符的出現(xiàn)就是為了處理這種情況弃榨。
var regex = new RegExp('\u{61}', 'u');
console.log(regex.unicode); // true
4、y 修飾符
sticky 的值是 Boolean 梨睁,并在“y”標(biāo)志使用時(shí)為真; 否則為假鲸睛。"y" 標(biāo)志指示,僅從正則表達(dá)式的 lastIndex 屬性表示的索引處為目標(biāo)字符串匹配(并且不會(huì)嘗試從后續(xù)索引匹配)坡贺。
var regex = /^foo/y;
regex.lastIndex = 2;
regex.test("..foo"); // false - 索引2不是字符串的開始
var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test("..foo"); // false - 索引2不是字符串或行的開始
regex2.lastIndex = 2;
regex2.test(".\nfoo"); // true - 索引2是行的開始
章節(jié)目錄
1官辈、ES6中啥是塊級作用域?運(yùn)用在哪些地方遍坟?
2拳亿、ES6中使用解構(gòu)賦值能帶給我們什么?
3愿伴、ES6字符串?dāng)U展增加了哪些肺魁?
4、ES6對正則做了哪些擴(kuò)展隔节?
5鹅经、ES6數(shù)值多了哪些擴(kuò)展?
6怎诫、ES6函數(shù)擴(kuò)展(箭頭函數(shù))
7瘾晃、ES6 數(shù)組給我們帶來哪些操作便利?
8刽虹、ES6 對象擴(kuò)展
9酗捌、Symbol 數(shù)據(jù)類型在 ES6 中起什么作用?
10涌哲、Map 和 Set 兩數(shù)據(jù)結(jié)構(gòu)在ES6的作用
11胖缤、ES6 中的Proxy 和 Reflect 到底是什么鬼?
12阀圾、從 Promise 開始踏入異步操作之旅
13哪廓、ES6 迭代器(Iterator)和 for...of循環(huán)使用方法
14、ES6 異步進(jìn)階第二步:Generator 函數(shù)
15初烘、JavaScript 異步操作進(jìn)階第三步:async 函數(shù)
16涡真、ES6 構(gòu)造函數(shù)語法糖:class 類