ECMAScript 6(7)正則的擴充套件

2021-09-23 10:35:32 字數 4704 閱讀 1045

目錄

正則的擴充套件

1.  變更修飾符

1.1  修飾符

1.2  檢視修飾符

1.3  變更修飾符

2.  新修飾符

2.1、修飾符u

2.2  點字元

2.3  修飾符y

3.  正規表示式屬性 

3.1  sticky屬性

3.2  flags屬性

4.  正規表示式方法 (es5)

字串方法 search()、replace()、match()、split()

search()

replace()

match()

split()

regexp物件方法 exec()、test()

exec()

test() 

1、建構函式可以通過第二個引數新增正規表示式的修飾符了;

2、新增了關於utf16字元、粘性匹配的正規表示式修飾符;

3、粘性匹配指:用乙個正規表示式連續對乙個字串進行匹配,每次匹配的起始位置是上一次的結束位置;

4、可以通過屬性檢視正則的內容(sticky)和修飾符(flags)了;

基礎戳 => 正規表示式基礎

修飾符效果備註g

全域性搜尋

全域性匹配

i不區分大小寫搜尋

不區分大小寫

m多行搜尋

多行匹配模式,^匹配一行的開頭和字串的開頭,$匹配行的結束和字串的結束

es6中可以檢視修飾符

語法 : 

正規表示式.flags
示例** : 

/\d/g.flags;   //g
var reg = /\w/g;

var newreg = new regexp(reg, "i");

newreg; // /\w/i

1.  修飾符u用來正確處理大於\uffff的 unicode 字元。也就是說,會正確處理四個位元組的 utf-16 編碼。

對於碼點大於\uffff的字元,普通的正規表示式是無法匹配到的,例如』\ud83d\udc2a』會被認為是2個字元,而不是乙個字元(這個字元是乙個小馬);

而加了修飾符u後,就可以正確的匹配到他了;

/^\ud83d/u.test('\ud83d\udc2a') // false

/^\ud83d/.test('\ud83d\udc2a') // true

es6 新增了使用大括號表示 unicode 字元,這種表示法在正規表示式中必須加上u修飾符,才能識別當中的大括號,否則會被解讀為量詞。

/\u/.test('a') // false

/\u/u.test('a') // true

/\u/u.test('?') // true

上面**表示,如果不加u修飾符,正規表示式無法識別\u這種表示法,只會認為這匹配 61 個連續的u

使用u修飾符後,所有量詞都會正確識別碼點大於0xffff的 unicode 字元。

不過換句話說,大部分碼點大於0xffff字元的,都不是中文的常見字元。所以我認為最重要的是通過修飾符u來檢視字串的實際長度。

function codepointlength(text) 

codepointlength('\ud83d\udc2a'); //1

1.  點(.)字元在正規表示式中,含義是除了換行符以外的任意單個字元。

2.  對於碼點大於0xffff的 unicode 字元,點字元不能識別,必須加上u修飾符。

var s = '?';

/^.$/.test(s) // false

/^.$/u.test(s) // true

上面**表示,如果不新增u修飾符,正規表示式就會認為字串為兩個字元,從而匹配失敗。

1.y修飾符,叫做「粘連」(sticky)修飾符。

2.  若字串對同乙個表示式的多次匹配,會從上一次匹配成功的位置開始.

var str = 'abcdef';

var reg = /\w/y;

console.log(str.match(reg));    //["a"]

console.log(reg.lastindex);     //1

console.log(str.match(reg));    //["b"]

console.log(reg.lastindex);     //2

簡單來說, 就是檢查是否設定了y修飾符

/d/y.sticky // true

/d/.sticky // false

獲取正規表示式的修飾符.

/abc/g.flags;    //"g"

/abc/gy.flags; //"qy"

用於檢索指定字串的子字串,並返回子字串的起始位置。

語法:

str.search(regexp);
示例1 :   引數是正則

'hello'.search(/l/i)  //2
示例2 :  引數是字串

'hello'.search('l')  //2
用在字串中的一些字元替換另一些字元,或替換與正規表示式匹配的字串。

語法 :

str.replace(regexp)
示例 : 

'hello es6'.replace(/es6/i, 'world');  //hello world

'hello es6'.replace('es6', 'world'); //hello world

在字串內檢索指定的值,或找到乙個或多個正規表示式的匹配,並以陣列形式返回匹配結果

語法 : 

str.match(regexp);
示例 :

var str = 'is this all there is?';

str.match(/is/gi); //["is", "is", "is"]

把乙個字串分割成字串陣列

語法 :

str.split(separator,limit),separator為字串或正規表示式,limit指定返回陣列的最大長度。
示例 :

var str = 'how are you doing today?'

console.log(str.split()); //["how are you doing today?"]

console.log(str.split('')); //["h", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", " ", "t", "o", "d", "a", "y", "?"]

console.log(str.split(' ',3)); //["how", "are", "you"]

console.log(str.split('o')); //["h", "w are y", "u d", "ing t", "day?"]

在乙個指定字串中執行乙個搜尋匹配。返回乙個結果陣列或null

語法 :

regexobj.exec(str)
示例 :

var re = /l/ig;

var result = re.exec('hello world'); //[l]

方法執行乙個檢索,用來檢視正規表示式與指定的字串是否匹配。返回truefalse

語法 :

regexobj.test(str)
示例 :

/h/i.test('hello');   // true

/w/i.test('hello'); // false

ECMAScript6 新特性 「正則的擴充套件」

es6 允許regexp建構函式接受正規表示式作為引數。第二個引數指定修飾符,如果存在則使用指定的修飾符。var regexp new regexp xyz i,ig console.log regexp.flags gi字串物件的4個使用正規表示式的方法 match replace search ...

ECMAScript描述的內容

ecmascript描述的內容是這門語法的基本工作原理,描述的內容包括語法 操作符 資料型別 內建功能等用於構建複雜方案的基本概念。一 語法 1.1 ecmascript中的變數 函式 操作符等的一切都區分大小寫。1.2 識別符號 第乙個必須是字母 下劃線或美元符號。1.3 注釋 1.4 嚴格模式 ...

ECMAScript中的函式

有 3 種定義函式的方式 函式宣告 function關鍵字後需要指定函式名 function sum num1,num2 不加分號 console.log sum 2,3 5函式表示式 function關鍵字後不用指定函式名 函式末尾需要新增乙個分號,就像宣告其他變數時一樣 var sum func...