第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

JavaScript 入門教程

JavaScript RegExp

RegExp 構(gòu)造函數(shù)創(chuàng)建了一個(gè)正則表達(dá)式對象,用于將文本與一個(gè)模式匹配。

RegExp 的實(shí)例用于生成一個(gè)正則表達(dá)式,利用正則表達(dá)式從字符串中匹配想要的內(nèi)容。

正則表達(dá)式不是 JavaScript 的一個(gè)子內(nèi)容,也并非 JavaScript 獨(dú)有,需要學(xué)習(xí)正則表達(dá)式可以查閱相對應(yīng)的文獻(xiàn)。

1. 創(chuàng)建實(shí)例

創(chuàng)建一個(gè) RegExp 實(shí)例,只需要將其當(dāng)作構(gòu)造函數(shù)使用:

var regexp = new RegExp(/^a*$/);

regexp.test('aaaa'); // true
regexp.test('a'); // true
regexp.test('a1'); // false

上面這個(gè)例子創(chuàng)建了一個(gè)規(guī)則為從開頭到結(jié)尾必須是任意個(gè)a正則表達(dá)式。

注意上面的例子中實(shí)際上是把一個(gè)正則表達(dá)式字面量作為參數(shù)傳遞給了 RegExp 構(gòu)造函數(shù)。

test 方法可以用來校驗(yàn)?zāi)硞€(gè)字符串能否使用這個(gè)正則表達(dá)式匹配到目標(biāo)。

如果不想傳遞字面量,也可以傳遞一個(gè)正則表達(dá)式字符串,這個(gè)時(shí)候不需要使用 / 包裹,而字面量是需要 / 包裹的。

var regexp = new RegExp('^a*$'); // 不需要使用 / 將表達(dá)式包裹起來

regexp.test('aaaa'); // true
regexp.test('a'); // true
regexp.test('a1'); // false

這樣創(chuàng)建出來的和傳遞正則表達(dá)式字面量的效果一樣。

傳遞字符串的時(shí)候還能傳遞第二個(gè)參數(shù),作為正則表達(dá)式的符號,部分文獻(xiàn)也稱其為描述符。

var regexp1 = new RegExp('^a*$', 'i');
var regexp2 = new RegExp('^a*$');

var str = 'AAAAA';

console.log(regexp1.test(str)); // 輸出:true
console.log(regexp2.test(str)); // 輸出:false

符號 i 表示忽略大小寫,所以 regexp2 無法在 str 中匹配到值。

如果需要多個(gè)符號,則將多個(gè)符號放在一起作為字符串即可。

var regexp = new RegExp('^a*$', 'igm');

2. 字面量

通常構(gòu)造函數(shù)會在不確定表達(dá)式的內(nèi)容情況下使用,預(yù)定義好的正則表達(dá)式通常都會用字面量來表示。

正則表達(dá)式的字面量使用一對 / 進(jìn)行包裹。

var regexp = /^a&/;

這里不需要引號進(jìn)行包裹,使用引號就變成了字符串。

如果需要加入符號,則跟在末尾即可。

var regexp1 = /^a*$/g;
var regexp2 = /^a*$/ig;

3. 符號

在 ES6 之前,有三種符號。

  • g 全局匹配,找到所有匹配,而不是在第一個(gè)匹配后停止
var regexp1 = /a/g;
var regexp2 = /a/;

var str = 'abcdeabcde';

console.log(str.match(regexp1)); // 匹配到兩個(gè) a
console.log(str.match(regexp2)); // 只匹配到一個(gè),并返回相應(yīng)信息

可以看到,regexp1 能匹配到兩個(gè) a。

  • i 忽略大小寫
var regexp1 = /apple/i;
var regexp2 = /apple/;

var str = 'AN APPLE A DAY KEEPS THE DOCTOR AWAY.';

console.log(str.match(regexp1)); // 可以找到一個(gè)
console.log(str.match(regexp2)); // 找不到 輸出:null

regexp2沒有忽略大小寫,所以是無法匹配到 apple 的。

  • m 多行匹配

多行匹配模式下,開頭和末尾就不是整個(gè)字符串的開頭和末尾了,而是一行的開頭和末尾。

目前 ES6 提供了三種新的描述符,分別為 u(Unicode 模式),y(粘連模式),s(dotAll 模式)。

4. 常用的正則表達(dá)式匯總

正則表達(dá)式不一定通用,可能需要結(jié)合業(yè)務(wù)的實(shí)際場景來做調(diào)整。

4.1 URL

/(http[s]?:\/\/)?[^\s(["<,>]*\.[^\s[",><]*/

4.2 純數(shù)字

/^[0-9]*$/

4.3 郵箱

/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/

4.4 中文與全角符號

/[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]/

4.5 身份證(不驗(yàn)證是否合法)

/\d{15}(\d\d[0-9xX])?/

4.6 僅包含英文字母的字符串

/^[A-Za-z]+$/

4.7 正整數(shù)

/^\d+$/

4.8 負(fù)整數(shù)

/^((-\d+)|(0+))$/

4.9 數(shù)字(正負(fù)數(shù)、小數(shù))

/^(\-|\+)?\d+(\.\d+)?$/

4.10 IPv4

/^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/

5. 小結(jié)

正則表達(dá)式字面量需要使用 / 包裹,通常字面量會用于寫死固定的正則表達(dá)式,如果需要動態(tài)生成,都會使用構(gòu)造函數(shù)的方式。