91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在JavaScript中引用RegExp類型

發布時間:2021-04-01 17:12:37 來源:億速云 閱讀:149 作者:Leah 欄目:web開發

怎么在JavaScript中引用RegExp類型?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、正則表達式定義

三個標志:全局模式g,不區分大小寫模式i,多行模式m。

1) 字面量定義

var pattern = /[fe]at/gim;

2) 構造函數定義:

接收兩個參數——要匹配的字符串模式和可選的模式字符串(g,i,m)。

var pattern = new RegExp("[fe]at","gim");

注意:

1) 若需要匹配的字符串中包含以下元字符,就必須對它們進行轉義:( [ { \ ^ & | ) ? * + . ] } 。

2) 由于構造函數定義正則表達式的參數是字符串,所以在某些情況下要對字符時行雙重轉義如\n,字符\在字符串中通常被轉義為\\,而在正則表達式字符串參數中就會變成\\\\,字面量模式/\w\\hello\\123/等價的字符串為“\\w\\\\hello\\\\123”。

2、RegExp實例屬性

  • 1) global 表示是否設置了g標志。

  • 2) ignoreCase 表示是否設置了i標志。

  • 3) multiline 表示是否設置了m標志。

  • 4) lastIndex 用于記錄上一次匹配結束的位置,即下一次開始搜索下一個匹配項的位置,從0算起。

  • 5) Source返回正則表達式的字符串表示,按照字面量模式返回而非傳入構造函數的字符串模式返回。

var pattern = new RegExp("\\[fe\\]at","i");
alert(pattern.source);

以上代碼返回\[fe\]at

3、RegExp實例方法

1) 繼承的toLocaleString()toString()valueOf()方法

toLocaleString():返回正則表達式的字面量,與創建正則表達式的方式無關。

toString():返回正則表達式的字面量,與創建正則表達式的方式無關。

valueOf():返回正則表達式本身。

var pattern1 = /\[fe\]at/i);
var pattern2 = new RegExp("\\[fe\\]at","i");
alert(pattern1.toString()); // /\[fe\]at/i
alert(pattern1.toLocaleString()); // /\[fe\]at/i
alert(pattern2.toString()); // /\[fe\]at/i
alert(pattern2.toLocaleString()); // /\[fe\]at/i

2) match()方法

參數:用于匹配的正則表達式。

返回值:區分match()的返回值主要是看是否設置g標志,沒有設置g標志時與exec()是等價的。

a. 如果設置g標志,那么返回的是包含所有匹配項的數組。

b. 如果沒有設置g標志,那么返回的是包含第一個匹配項的數組,第0項是與整個正則表達式匹配的字符串,第1項是是與第1個子表達式相匹配的文本(如果有的話),第2項是與第2個子表達式相匹配的文本(如果有的話)。

3) exec()方法

參數:要應用模式的字符串。

返回值:返回包含第一個匹配項信息的數組,沒有匹配項的情況下返回null。exec()的返回值不受g標志影響,在不設置g標志時,在同一個字符串上多次調用exec()將會始終返回第一個匹配項的信息。即使設置了g標志,一次也只返回一個匹配項,但設置g標志時,每次調用exec()都會在字符串中繼續查找新匹配項,會驅動lastIndex可以模擬遍歷所有匹配,可以與match()設置g標志時等價(區別在于遍歷所有匹配時,exec()需要多次匹配,match()一次匹配即可得到所有匹配)。

返回的數組包含額外的兩個屬性:index和input。其中,index表示匹配項在字符串中的位置,而input表示應用正則表達式的字符串。在數組中,第0項是與整個正則表達式匹配的字符串,第1項是是與第1個子表達式相匹配的文本(如果有的話),第2項是與第2個子表達式相匹配的文本(如果有的話)。

var str = "Shanghai and Beijing and Guangzhou";
var pattern = /Shanghai ( and Beijing ( and Guangzhou)?)?/gi;
var match = pattern.exec(str);
alert(match.index);//0
alert(match.input);//"Shanghai and Beijing and Guangzhou"
alert(match[0]);//"Shanghai and Beijing and Guangzhou"
alert(match[1]);//"and Beijing and Guangzhou"
alert(match[2]);//"and Guangzhou"

在不設置g標志的情況下,同一個字符串上調用exec()始終返回第一個匹配項的信息。

var str = "fat eat";
var pattern = /.at/;
var match = pattern.exec(str);
alert(match.index);//0
alert(match.input);//fat eat
alert(match[0]);//fat
alert(pattern.lastIndex);//0
var match = pattern.exec(str);
alert(match.index);//0
alert(match.input);//fat eat
alert(match[0]);//fat
alert(pattern.lastIndex);//0

設置全局標志g情況下,同一個字符串上調用exec()每次會返回一個新的匹配項的信息。

var str = "fat eat";
var pattern = /.at/g;
var match = pattern.exec(str);
alert(match.index);//0
alert(match.input);//fat eat
alert(match[0]);//fat
alert(pattern.lastIndex);//3
var match = pattern.exec(str);
alert(match.index);//4
alert(match.input);//fat eat
alert(match[0]);//eat
alert(pattern.lastIndex);//7

4)  test()方法

參數:要應用模式的字符串

返回值:在模式與該參數匹配的情況下返回true,否則返回false。

test()方法經常用于if語句中。

問題:

如果正則表達式帶有標志g,使用test校驗不同的字符串時,RegExp會使用test前一個字符串得出的lastIndex去test后一個字符串,必定出錯。

var pattern = /^[1-9]\d{4,10}$/gi;
var str = "88888";
alert(pattern.test(str));//返回true
str = "888888";
alert(pattern.test(str));//返回false

解決方法:

① 將正則表達式的 lastIndex 屬性設置為0 再用作校驗

var pattern = /^[1-9]\d{4,10}$/gi;
var str = "88888";
alert(pattern.test(str));//返回true
str = "888888";
pattern.lastIndex=0;
alert(pattern.test(str));//返回true

② 正則表達式去掉標志g

var pattern = /^[1-9]\d{4,10}$/i;
var str = "88888";
alert(pattern.test(str));//返回true
str = "888888";
alert(pattern.test(str));//返回true

5) 說明:

① exec()test()是正則表達式的方法,而不是字符串的方法,它的參數才是字符串;match是字符串的方法,而不是正則表達式的方法,它的參數才是正則表達式。

② 即使設置了g標志,exec()每次只返回一個匹配項。沒有設置g標志時,exec()match()執行結果相同;設置g標志時,match()將忽略子表達式,只查找全匹配正則表達式。

③ exec()match()的區別:

a. 當正則表達式無子表達式,并且沒有設置g標志時,exec()match()執行結果相同,均返回第一個匹配的字符串內容。

var pattern = new RegExp("cat") ;
var str = "onecat twocat";
alert(pattern.exec(str));//返回cat
alert(str.match(pattern));//返回cat

b. 當正則表達式無子表達式,并且設置g標志時,exec()返回第一個匹配的字符串內容,若存在多處匹配內容,則match()返回的是包含所有匹配字符串的數組。

var pattern = new RegExp("cat","g") ;
var str = "onecat twocat";
alert(pattern.exec(str));//返回cat
alert(str.match(pattern));//返回cat,cat

c. 當正則表達式有子表達式,并且沒有設置g標志時,exec()match()執行結果相同,都查找全匹配正則表達式和子表達式,并返回包含全匹配字符串和匹配子表達式的數組。

var pattern = new RegExp("c(at)") ;
var str = "onecat twocat";
alert(pattern.exec(str));//返回cat,at
alert(str.match(pattern));//返回cat,at

d. 當正則表達式有子表達式,并且設置g標志時,exec()match()執行的結果不相同,match()將忽略子表達式,只查找全匹配正則表達式,并返回包含所有匹配字符串的數組。

var pattern = new RegExp("c(at)","g") ;
var str = "onecat twocat";
alert(pattern.exec(str));//返回cat,at
alert(str.match(pattern));//返回cat,cat

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长丰县| 厦门市| 台东市| 虎林市| 泰安市| 旌德县| 淳安县| 红河县| 临猗县| 汝阳县| 深州市| 呼玛县| 英德市| 安庆市| 界首市| 奉新县| 咸丰县| 平远县| 兰考县| 唐河县| 新巴尔虎左旗| 古蔺县| 梁平县| 枣强县| 墨玉县| 北京市| 巩留县| 江口县| 广宁县| 洞头县| 青河县| 汨罗市| 容城县| 大悟县| 绥德县| 南通市| 台东县| 滁州市| 施甸县| 皮山县| 手游|