ES第六章 正則的擴充套件

2021-10-10 01:42:04 字數 4782 閱讀 9929

(1)引數字串,引數一位字串,此時第二個引數表示正規表示式的修飾符(flag)

var regex = new regexp

('xyz','i');

等價於var regex = /xyz/i;

(2)正規表示式,引數一為正規表示式,此時會返回原有的正規表示式

var regex = new regexp

(/xyz/i)

;等價於

var regex = /xyz/i;

(3)若regexp建構函式的引數一為正則物件,引數二可用於指定修飾符,那麼指定的修飾符會覆蓋前面的修飾符。

var regex = new regexp

(/abc/ig,'i');

alert

(regex.flags)

; //"i"

字串物件共有4個方法可以使用正規表示式:match(),replace(),search(),split().

es6將這四個方法全部呼叫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]

用於處理大於\uffff的unicode字元。

/^\ud83d/u.test

('\ud83d\udc2a'

) // false,用了u修飾符,後面是乙個字元

/^\ud83d/.test

('\ud83d\udc2a'

) // true,沒有用u修飾符,第乙個能匹配到

(1)點字元:在正規表示式中代表除換行符以外的任意單個字元。對於大於0xffff的unicode字元,點字元不能識別,必須加上u修飾符。

var s = '?'

;// false,不加u修飾符,會被認為是兩個字元,匹配失敗

/^.$/.test

(s)

/^.$/u.test

(s) // true

(2)unicode字元表示法

es6新增用 表示unicode字元,但必須用u修飾符。

/\u

/.test('a') // false,沒有用u修飾符,會識別連續的61個a

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

/\u/u.test

('?'

) // true

(3)量詞

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

/a

/.test('aa') // true

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

/?/.test('??') // false

/?/u.test

('??'

) // true

(4)預定義模式

u修飾符也能影響到預定義模式,能否正確識別碼點

/^\s$/.test

('?'

) // false

/^\s$/u.test

('?'

) // true

(5)i修飾符

有些字元編碼不同但是字型相近,如:\u0048,\u212a都是大寫的k。

/[a-z]/i.test

('\u212a'

) // false

/[a-z]/iu.test

('\u212a'

) // true

(6)轉義

沒有u修飾符的時候,轉義無效;

/\,/	輸出:/\,/
沒有u修飾符時,轉義報錯。

/\,/u // 報錯
正則新增unicode屬性,用來表示是否設定了u修飾符

const r1 = /hello/;

const r2 = /hello/u;

r1.unicode // false

r2.unicode // true

var s = 'aaa_aa_a'

;var r = /a+_/y;

r.exec

(s) // ["aaa_"]

r.exec

(s) // ["aa_"]

表示是否設定了y修飾符

var r = /hello\d/y;

alert

(r.stricky)

; //true

flags屬性返回修飾符

alert

(/abc/ig.flags)

;

es5的source屬性,可以返回正規表示式的正文

alert

(/abc/ig.source)

;

(.)修飾符:點代表任意單個字元,但有兩個例外。

(1)乙個四位元組的utf-16字元,用u修飾符可以解決

(2)另乙個是行終止符,有4個(\u000a:換行符;\u000d:回車符;\u2028:行分隔符;\u2029:段分隔符)

(.)不會匹配到這4個終止符。

/foo.bar/.test

(`foo\nbar`)

; //false,(.)不能替換掉\n

/foo[^]bar/.test

('foo\nbar'

); //true,[^]可以替換\n

新的類\p,\p,允許正規表示式匹配符合unicode某種屬性的所有字元,必須使用u修飾符。

(1)簡介:使用()匹配資料,用exec()方法;

const a = /(\d

)-(\d

)-(\d

)/;const b = a.exec

('1999-12-31');

/*b[1]==1999 b[2]==12 b[3]==31*/

const re_date = /(?\d

)-(?\d

)-(?\d

)/;const matchobj = re_date.exec

('1999-12-31');

const year = matchobj.groups.year; // 1999

const month = matchobj.groups.month; // 12

const day = matchobj.groups.day; // 31

const text = 'zabbcdef'

;const re = /ab/;

const result = re.exec

(text)

;result.index // 1

result.indices // [ [1, 3] ]

const text = 'zabbcdef'

;const re = /ab+(cd)/;

const result = re.exec

(text)

;result.indices // [ [ 1, 6 ], [ 4, 6 ] ]

const text = 'zabbcdef'

;const re = /ab+(?cd)/;

const result = re.exec

(text)

;result.indices.groups //

一次取出所有匹配,返回遍歷器,可用for…of迴圈取出。若要轉換成陣列,可用array.front().即:

// 轉為陣列的方法一

[...string.matchall

(regex)]

// 轉為陣列的方法二

array.from

(string.matchall

(regex)

)

const string = 'test1test2test3'

;const regex = /t

(e)(

st(\d?)

)/g;

for (const match of string.matchall(regex))

// ["test1", "e", "st1", "1", index

: 0, input

:"test1test2test3"]

// ["test2", "e", "st2", "2", index

: 5, input

:"test1test2test3"]

// ["test3", "e", "st3", "3", index

: 10, input

:"test1test2test3"]

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

ES6學習 第六章 數值的擴充套件

created by z18630 on 2018 12 11 0011.第六章 數值的擴充套件 二進位制 0b 和八進位制 0o 表示法 console.log 0b110,number 0b110 number 把引數轉化為數字,無法轉換返回nan 6 6 console.log 0o23 19...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...