亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Regexp對象

NervosNetwork / 3469人閱讀

摘要:等價(jià)于實(shí)例屬性正則對象的實(shí)例屬性分成兩類。返回一個(gè)布爾值,表示是否設(shè)置了修飾符。字符串對象的方法,返回第一個(gè)滿足條件的匹配結(jié)果在整個(gè)字符串中的位置。字符串對象的方法按照正則規(guī)則分割字符串,返回一個(gè)由分割后的各個(gè)部分組成的數(shù)組。

概述
實(shí)例屬性
實(shí)例方法
RegExp.prototype.test()g
RegExp.prototype.exec()g括號indexx input屬性
字符串的實(shí)例方法
String.prototype.match()像exec返回字符串?dāng)?shù)組 區(qū)別g一次返回全部 lastibdex無效
String.prototype.search()
String.prototype.replace()加g一次換全部
String.prototype.split()
匹配規(guī)則
字面量字符和元字符
轉(zhuǎn)義符
特殊字符
字符類
預(yù)定義模式
重復(fù)類
量詞符
貪婪模式
修飾符
組匹配

1.概述
正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法

1.1新建正則表達(dá)式有兩種方法。一種是使用字面量,以斜杠表示開始和結(jié)束。

var regex = /xyz/;
另一種是使用RegExp構(gòu)造函數(shù)。

var regex = new RegExp("xyz");

主要區(qū)別是,第一種方法在引擎編譯代碼時(shí),就會(huì)新建正則表達(dá)式,第二種方法在運(yùn)行時(shí)新建正則表達(dá)式,所以前者的效率較高

RegExp構(gòu)造函數(shù)還可以接受第二個(gè)參數(shù),表示修飾符(詳細(xì)解釋見下文)。

var regex = new RegExp("xyz", "i");
// 等價(jià)于
var regex = /xyz/i;

2.實(shí)例屬性
正則對象的實(shí)例屬性分成兩類。

一類是修飾符相關(guān),用于了解設(shè)置了什么修飾符。

RegExp.prototype.ignoreCase:返回一個(gè)布爾值,表示是否設(shè)置了i修飾符。
RegExp.prototype.global:返回一個(gè)布爾值,表示是否設(shè)置了g修飾符。
RegExp.prototype.multiline:返回一個(gè)布爾值,表示是否設(shè)置了m修飾符。
RegExp.prototype.flags:返回一個(gè)字符串,包含了已經(jīng)設(shè)置的所有修飾符,按字母排序。
上面四個(gè)屬性都是只讀的。

var r = /abc/igm;

r.ignoreCase // true
r.global // true
r.multiline // true
r.flags // "gim"

另一類是與修飾符無關(guān)的屬性,主要是下面兩個(gè)。

RegExp.prototype.lastIndex:返回一個(gè)整數(shù),表示下一次開始搜索的位置。該屬性可讀寫,但是只在進(jìn)行連續(xù)搜索時(shí)有意義,詳細(xì)介紹請看后文。
RegExp.prototype.source:返回正則表達(dá)式的字符串形式(不包括反斜杠),該屬性只讀。
var r = /abc/igm;

r.lastIndex // 0
r.source // "abc"

3.實(shí)例方法
3.1RegExp.prototype.test()
返回布爾值,看是否匹配
3.1.1帶g
(1)則每一次test方法都從上一次結(jié)束的位置開始向后匹配。 回記住lastindex
var r = /x/g;
var s = "_x_x";

r.lastIndex // 0
r.test(s) // true

r.lastIndex // 2
r.test(s) // true

r.lastIndex // 4
r.test(s) // false

(2)可以指定lastIndex屬性指定開始搜索的位置,
var r = /x/g;
var s = "_x_x";

r.lastIndex = 4;
r.test(s) // false

r.lastIndex // 0
r.test(s)

(3)注意,帶有g(shù)修飾符時(shí),正則表達(dá)式內(nèi)部會(huì)記住上一次的lastIndex屬性,這時(shí)不應(yīng)該更換所要匹配的字符串,否則會(huì)有一些難以察覺的錯(cuò)誤。

var r = /bb/g;
r.test("bb") // true
r.test("-bb-") // false

(4)lastIndex屬性只對同一個(gè)正則表達(dá)式有效,所以下面這樣寫是錯(cuò)誤的。

var count = 0;
while (/a/g.test("babaa")) count++;
上面代碼會(huì)導(dǎo)致無限循環(huán),因?yàn)閣hile循環(huán)的每次匹配條件都是一個(gè)新的正則表達(dá)式,導(dǎo)致lastIndex屬性總是等于0。每次新建一個(gè)regexp對象

3.1.3如果正則模式是一個(gè)空字符串,則匹配所有字符串。

new RegExp("").test("abc")
// true

3.1.2RegExp.prototype.exec()
匹配到的返回字符串?dāng)?shù)組,只有一個(gè)元素的數(shù)組。否則返回null

(1)有括號(組匹配) 返回多個(gè)成員

第一個(gè)成員是整個(gè)匹配成功的結(jié)果,后面的成員就是圓括號對應(yīng)的匹配成功的組。也就是說,第二個(gè)成員對應(yīng)第一個(gè)括號,第三個(gè)成員對應(yīng)第二個(gè)括號,以此類推。整個(gè)數(shù)組的length屬性等于組匹配的數(shù)量再加1。

var s = "_x_x";
var r = /_(x)/;

r.exec(s) // ["_x", "x"]
上面代碼的exec方法,返回一個(gè)數(shù)組。第一個(gè)成員是整個(gè)匹配的結(jié)果,第二個(gè)成員是圓括號匹配的結(jié)果。

(2)exec方法的返回?cái)?shù)組還包含以下兩個(gè)屬性:

input:整個(gè)原字符串。
index:整個(gè)模式匹配成功的開始位置(從0開始計(jì)數(shù))。

var r = /a(b+)a/;
var arr = r.exec("_abbba_aba_");

arr // ["abbba", "bbb"]

arr.index // 1
arr.input // "_abbba_aba_"
上面代碼中的index屬性等于1,是因?yàn)閺脑址牡诙€(gè)位置開始匹配成功。

(3)正則表達(dá)式加上g修飾符,則可以使用多次exec方法,下一次搜索的位置從上一次匹配成功結(jié)束的位置開始。

var reg = /a/g;
var str = "abc_abc_abc"

var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1

var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5

var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9

var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0

連續(xù)用了四次exec方法,前三次都是從上一次匹配結(jié)束的位置向后匹配。當(dāng)?shù)谌纹ヅ浣Y(jié)束以后,整個(gè)字符串已經(jīng)到達(dá)尾部,匹配結(jié)果返回null,正則實(shí)例對象的lastIndex屬性也重置為0,意味著第四次匹配將從頭開始。

g修飾符允許多次匹配的特點(diǎn),可以用一個(gè)循環(huán)完成全部匹配。

var reg = /a/g;
var str = "abc_abc_abc"

while(true) {
var match = reg.exec(str);
if (!match) break;
console.log("#" + match.index + ":" + match[0]);
}
// #0:a
// #4:a
// #8:a
上面代碼中,只要exec方法不返回null,就會(huì)一直循環(huán)下去,每次輸出匹配的位置和匹配的文本。

4.字符串的實(shí)例方法
String.prototype.match():返回一個(gè)數(shù)組,成員是所有匹配的子字符串。
String.prototype.search():按照給定的正則表達(dá)式進(jìn)行搜索,返回一個(gè)整數(shù),表示匹配開始的位置。
String.prototype.replace():按照給定的正則表達(dá)式進(jìn)行替換,返回替換后的字符串。一個(gè)而已 有g(shù)才替換全部
String.prototype.split():按照給定規(guī)則進(jìn)行字符串分割,返回一個(gè)數(shù)組,包含分割后的各個(gè)成員

String.prototype.match()
正則表達(dá)式帶有g(shù)修飾符,則該方法與正則對象的exec方法行為不同,會(huì)一次性返回所有匹配成功的結(jié)果。
var s = "_x_x";
var r1 = /x/;
var r2 = /y/;

s.match(r1) // ["x"]
s.match(r2) // null

設(shè)置正則表達(dá)式的lastIndex屬性,對match方法無效,匹配總是從字符串的第一個(gè)字符開始。

var r = /a|b/g;
r.lastIndex = 7;
"xaxb".match(r) // ["a", "b"]
r.lastIndex // 0
var s = "abba";
var r = /a/g;

s.match(r) // ["a", "a"]
r.exec(s) // ["a"]

String.prototype.search()
字符串對象的search方法,返回第一個(gè)滿足條件的匹配結(jié)果在整個(gè)字符串中的位置。如果沒有任何匹配,則返回-1。

"_x_x".search(/x/)
// 1

(2)String.prototype.replace()
正則表達(dá)式如果不加g修飾符,就替換第一個(gè)匹配成功的值,否則替換所有匹配成功的值。

"aaa".replace("a", "b") // "baa"
"aaa".replace(/a/, "b") // "baa"
"aaa".replace(/a/g, "b") // "bbb"

2.1replace方法的第二個(gè)參數(shù)可以使用美元符號$,用來指代所替換的內(nèi)容。

$&:匹配的子字符串。
$`:匹配結(jié)果前面的文本。
$":匹配結(jié)果后面的文本。
$n:匹配成功的第n組內(nèi)容,n是從1開始的自然數(shù)。
$$:指代美元符號$。
"hello world".replace(/(w+)s(w+)/, "$2 $1")
// "world hello"

"abc".replace("b", "[$`-$&-$"]")
// "a[a-b-c]c"
上面代碼中,第一個(gè)例子是將匹配的組互換位置,第二個(gè)例子是改寫匹配的值。

2.2replace方法的第二個(gè)參數(shù)還可以是一個(gè)函數(shù),將每一個(gè)匹配內(nèi)容替換為函數(shù)返回值
"3 and 5".replace(/[0-9]+/g, function (match) {
return 2 * match;
})
// "6 and 10"

var a = "The quick brown fox jumped over the lazy dog.";
var pattern = /quick|brown|lazy/ig;

a.replace(pattern, function replacer(match) {
return match.toUpperCase();
});
// The QUICK BROWN fox jumped over the LAZY dog.
作為replace方法第二個(gè)參數(shù)的替換函數(shù),可以接受多個(gè)參數(shù)。其中,第一個(gè)參數(shù)是捕捉到的內(nèi)容,第二個(gè)參數(shù)是捕捉到的組匹配(有多少個(gè)組匹配,就有多少個(gè)對應(yīng)的參數(shù))。此外,最后還可以添加兩個(gè)參數(shù),倒數(shù)第二個(gè)參數(shù)是捕捉到的內(nèi)容在整個(gè)字符串中的位置(比如從第五個(gè)位置開始),最后一個(gè)參數(shù)是原字符串。下面是一個(gè)網(wǎng)頁模板替換的例子。

var prices = {
"p1": "$1.99",
"p2": "$9.99",
"p3": "$5.00"
};

var template = ""

""

"";

template.replace(
/()()/g,
function(match, $1, $2, $3, $4){

return $1 + $2 + $3 + prices[$2] + $4;

}
);
// "$1.99$9.99$5.00"
上面代碼的捕捉模式中,有四個(gè)括號,所以會(huì)產(chǎn)生四個(gè)組匹配,在匹配函數(shù)中用$1到$4表示。匹配函數(shù)的作用是將價(jià)格插入模板中。

String.prototype.split()

字符串對象的split方法按照正則規(guī)則分割字符串,返回一個(gè)由分割后的各個(gè)部分組成的數(shù)組。

str.split(separator, [limit])
該方法接受兩個(gè)參數(shù),第一個(gè)參數(shù)是正則表達(dá)式,表示分隔規(guī)則,第二個(gè)參數(shù)是返回?cái)?shù)組的最大成員數(shù)。

// 非正則分隔
"a, b,c, d".split(",")
// [ "a", " b", "c", " d" ]

// 正則分隔,去除多余的空格
"a, b,c, d".split(/, */)
// [ "a", "b", "c", "d" ]

// 指定返回?cái)?shù)組的最大成員
"a, b,c, d".split(/, */, 2)
[ "a", "b" ]
上面代碼使用正則表達(dá)式,去除了子字符串的逗號后面的空格。

// 例一
"aaaa".split(/a*/)
// [ "", "", "" ]

// 例二
"aaa*a".split(/a*/)
// ["", "", "", "*"]
上面代碼的分割規(guī)則是0次或多次的a,由于正則默認(rèn)是貪婪匹配,所以例一的第一個(gè)分隔符是aaa,第二個(gè)分割符是a,將字符串分成三個(gè)部分,包含開始處的空字符串。例二的第一個(gè)分隔符是aaa,第二個(gè)分隔符是0個(gè)a(即空字符),第三個(gè)分隔符是a,所以將字符串分成四個(gè)部分。

如果正則表達(dá)式帶有括號,則括號匹配的部分也會(huì)作為數(shù)組成員返回。

"aaaa".split(/(a*)/)
// [ "", "aaa", "", "a", "" ]
上面代碼的正則表達(dá)式使用了括號,第一個(gè)組匹配是aaa,第二個(gè)組匹配是a,它們都作為數(shù)組成員返回。

(3)String.prototype.split()
5.匹配規(guī)則
字面量字符和元字符
轉(zhuǎn)義符
特殊字符
字符類
預(yù)定義模式
重復(fù)類
量詞符
貪婪模式
修飾符
組匹配

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/105974.html

相關(guān)文章

  • JS中的正則表達(dá)式

    摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...

    Soarkey 評論0 收藏0
  • JS正則表達(dá)式精簡教程(JavaScript RegExp 對象

    摘要:返回值是被找到的值。支持正則表達(dá)式的對象的方法方法檢索與正則表達(dá)式相匹配的子字符串。該數(shù)組是通過在指定的邊界處將字符串分割成子串創(chuàng)建的。注意報(bào)錯(cuò)正確示例附表修飾符修飾符描述執(zhí)行對大小寫不敏感的匹配。查找以十六進(jìn)制數(shù)規(guī)定的字符。 什么是 RegExp? RegExp 是正則表達(dá)式的縮寫。 當(dāng)您檢索某個(gè)文本時(shí),可以使用一種模式來描述要檢索的內(nèi)容。RegExp 就是這種模式。 簡單的模式可以...

    ACb0y 評論0 收藏0
  • 【JavaScript】正則表達(dá)式

    摘要:對象對象對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強(qiáng)大工具。查找以十六進(jìn)制數(shù)規(guī)定的字符。支持正則表達(dá)式的對象的方法方法描述檢索與正則表達(dá)式相匹配的值。替換與正則表達(dá)式匹配的子串。 RegExp對象 RegExp 對象 RegExp 對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強(qiáng)大工具。 直接量語法 /pattern/attributes 創(chuàng)建 RegExp 對象的語法 new R...

    894974231 評論0 收藏0
  • PocketLibs(2)—— 請求相關(guān) path-to-regexp

    摘要:直接調(diào)用構(gòu)造函數(shù)使用,一個(gè)可能含某種匹配模式的路徑字符串作為它的必選參數(shù),它返回一個(gè)正則對象。有兩個(gè)方法返回一個(gè)正則對象,效果與調(diào)用構(gòu)造函數(shù)一樣返回一個(gè)函數(shù),該函數(shù)與下面的返回的函數(shù)功能一樣方法,同樣接收一個(gè)路徑字符串。 code in here使用path-to-regexp,我們可以在路徑字符串中使用正則。如/:foo*/:bar?、/icon-:foo(d+).png等。像exp...

    Prasanta 評論0 收藏0
  • Javascript正則表達(dá)式入門

    摘要:返回值一個(gè)新的對象,具有指定的模式和標(biāo)志。參數(shù)作用正則表達(dá)式規(guī)定匹配的類型。如果未找到匹配,則返回值為。返回值請注意,無論是否是全局模式,都會(huì)把完整的細(xì)節(jié)添加到它返回的數(shù)組中。字符串或正則表達(dá)式,從該參數(shù)指定的地方分割。 前言 PS:2018/03/27 優(yōu)化文章格式,新增部分測試代碼說起正則其實(shí)大家都會(huì)經(jīng)常接觸到,前端小到校驗(yàn),大到插件隨處可見,簡單的方法也能實(shí)現(xiàn)需求,不過缺乏靈活性...

    joywek 評論0 收藏0
  • JavaScript標(biāo)準(zhǔn)庫系列——RegExp對象(三)

    摘要:目錄導(dǎo)語理解正則表達(dá)式模式的規(guī)則字符串和正則實(shí)例的屬性和方法檢索實(shí)例小結(jié)導(dǎo)語正則表達(dá)式是處理字符串的一門藝術(shù)手法,應(yīng)用場景經(jīng)常出現(xiàn)在表單驗(yàn)證部分高級程序設(shè)計(jì)一書開篇提到,這門語言最原始的應(yīng)用就是處理輸入驗(yàn)證操作,所以正則表達(dá)式從誕生那一刻就 目錄 導(dǎo)語 1.理解正則表達(dá)式 2.模式的規(guī)則 3.字符串和正則實(shí)例的屬性和方法 4.檢索實(shí)例 5. 小結(jié) 導(dǎo)語 正則表達(dá)式是處理字符串的一門藝...

    邱勇 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<