成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

正則表達(dá)式相關(guān)的API

MobService / 2035人閱讀

摘要:如果傳入的字符串與正則表達(dá)式匹配,返回,反之返回。根據(jù)正則表達(dá)式里面是否有,的行為有較大差異。六方法的參數(shù)可以是一個(gè)正則表達(dá)式,也可以是一個(gè)字符方法按照給定的正則表達(dá)式或者字符分割字符串,返回一個(gè)包含分割后的子串的數(shù)組。

與正則表達(dá)式相關(guān)的API有以下7個(gè):

RegExp.prototype?.test()

RegExp.prototype?.exec()

String?.prototype?.search()

String?.prototype?.match()

String?.prototype?.matchAll()

String?.prototype?.split()

String?.prototype?.replace()

在我們展開到各個(gè)方法之前,先來看一下在JavaScript里面定義一個(gè)正則表達(dá)式的兩種方式:
1:字面量

let reg = /d[a-z]/ig;

2:new一個(gè)RegExp()對(duì)象

let reg = new RegExp(/d[a-z]/, "ig");

上面的2種方式定義的正則表達(dá)式,對(duì)于我們接下來要講的6個(gè)方法都是適用的。
一:RegExp.prototype?.test()
test()的參數(shù)是一個(gè)字符串,返回結(jié)果為布爾值。如果傳入的字符串與正則表達(dá)式匹配,返回true,反之返回false。

let reg = new RegExp(/d[a-z]/, "ig");
reg.test("1a"); // true
reg.test("a1"); //false

二:RegExp.prototype?.exec()
exec()接受一個(gè)字符串為參數(shù),如果有匹配的,返回一個(gè)數(shù)組,如果沒有匹配則返回null。根據(jù)正則表達(dá)式里面是否有"g",exec()的行為有較大差異。接下來我們都討論都是假設(shè)有匹配的情況:
1: 如果無"g",則返回一個(gè)數(shù)組,包含第一個(gè)匹配到的子串,更新index,但是不再繼續(xù)匹配
2: 如果有"g",

1: 第一次執(zhí)行exec(),則返回包含第一個(gè)匹配到的子串,更新index;
2: 等下一次再執(zhí)行exec()時(shí)候,從index的位置開始繼續(xù)匹配。
3: 如果沒有可再匹配的,則返回null,把index設(shè)置為0

看到這里,可能有人會(huì)疑惑,為什么上面會(huì)提到下一次再執(zhí)行exec()。因?yàn)?,在?g"的情況下,假如我給定的字符串有2處匹配,但是執(zhí)行一次exec()其實(shí)只會(huì)得到一個(gè)匹配的子串,并不會(huì)一次性就把所有能匹配到的子串返回。所以,你得多次調(diào)用exec(),才能保證得到所有可匹配的子串。接下來我們就用代碼來說明一下:

let str = "can you open a can?";

let regexp = /can/ig;

let result = regexp.exec(str);
console.log(result);

我們得到結(jié)果:

["can", index: 0, input: "can you open a can?", groups: undefined]

意識(shí)里,我們可能以為會(huì)得到兩個(gè)匹配(一個(gè)開頭的"can"和句子結(jié)尾的"can"),但是事實(shí)是,哪怕是有"g"的情況下,你每調(diào)用一次exec()只會(huì)得到一個(gè)匹配結(jié)果。如果想到得到所有的匹配結(jié)果,我們就得循環(huán)調(diào)用exec():

let str = "can you open a can?";

let regexp = /can/ig;

let result;
while (result = regexp.exec(str)) {
    console.log(result)
}

我們得到結(jié)果:

["can", index: 0, input: "can you open a can?", groups: undefined]
["can", index: 15, input: "can you open a can?", groups: undefined]

三:String?.prototype?.search()
search()參數(shù)為一個(gè)正則表達(dá)式,返回值為第一個(gè)匹配的index,如果沒有任何匹配,則返回-1

let str = "can you open a can?";
let regexp = /can/ig;
let regexp2 = /abc/ig;
console.log(str.search(regexp)); // 0
console.log(str.search(regexp2)); // -1

關(guān)于search()需要記住的是:它只返回第一個(gè)匹配的index,一旦找到就會(huì)停止搜索,不會(huì)再繼續(xù)查找。

四:String?.prototype?.match()
match()方法也是會(huì)根據(jù)正則表達(dá)式是否帶有"g"而表現(xiàn)得不同,我們可以先看一段代碼對(duì)比一下:

let str = "Can you open a can";
let result = str.match( /can/i );
let result2 = str.match(/can/ig);
let result3 = str.match(/abc/ig);
console.log( result );//["Can", index: 0, input: "Can you open a can", groups: undefined]
console.log( result2 );//?["Can", "can"]
console.log( result3 );//null

我們從以上的result,result2,result3的結(jié)果可以得出match()的行為為

1: 當(dāng)沒有"g"時(shí),會(huì)以數(shù)組的形式返回第一個(gè)匹配的子串,以及一些附加信息
2: 當(dāng)有"g"時(shí),會(huì)以數(shù)組的形式返回所有匹配的子串,但是沒有附加信息
3: 如果沒有匹配的子串,返回null

關(guān)于match()完整地行為,需要結(jié)合著匹配組的知識(shí)一起看:正則表達(dá)式捕獲組
五:String.prototype.matchAll()
matchAll()還特別新,并不是所有的瀏覽器都支持了,這里先暫時(shí)不討論。以后再來補(bǔ)充。
六:String?.prototype?.split()
split()方法的參數(shù)可以是一個(gè)正則表達(dá)式,也可以是一個(gè)字符;split()方法按照給定的正則表達(dá)式或者字符分割字符串,返回一個(gè)包含分割后的子串的數(shù)組。

let str = "Can-you-open-a-can";
console.log(str.split(/-/)); //["Can", "you", "open", "a", "can"]

七:String?.prototype?.replace()

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/104028.html

相關(guān)文章

  • 正則達(dá)式 深入淺出2--從java API開始

    摘要:正則表達(dá)式等待匹配的字符這里可以輸入任何繼承了的類返回一個(gè)值說明是否匹配這里需要注意的是,和均不允許通過構(gòu)造器新建一個(gè)對(duì)象。 前言 之前一直想要做一個(gè)自己的爬蟲,然后從nba數(shù)據(jù)相關(guān)的網(wǎng)上【虎撲,騰訊,官網(wǎng)等,要視網(wǎng)站是否支持】爬點(diǎn)數(shù)據(jù)寫數(shù)據(jù)分析和圖形化展示。雖然年輕的時(shí)候就實(shí)現(xiàn)過這個(gè)功能,但是當(dāng)時(shí)直接借用了一個(gè)網(wǎng)上現(xiàn)成的jar包,然后在那個(gè)基礎(chǔ)上寫了一個(gè)非常簡(jiǎn)陋的正則表達(dá)式來提取數(shù)據(jù)...

    andycall 評(píng)論0 收藏0
  • H5學(xué)習(xí)

    摘要:為此決定自研一個(gè)富文本編輯器。本文,主要介紹如何實(shí)現(xiàn)富文本編輯器,和解決一些不同瀏覽器和設(shè)備之間的。 對(duì)ES6Generator函數(shù)的理解 Generator 函數(shù)是 ES6 提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。 JavaScript 設(shè)計(jì)模式 ② 巧用工廠模式和創(chuàng)建者模式 我為什么把他們兩個(gè)放在一起講?我覺得這兩個(gè)設(shè)計(jì)模式有相似之處,有時(shí)候會(huì)一個(gè)設(shè)計(jì)模式不能滿...

    aristark 評(píng)論0 收藏0
  • 《JavaScript 正則達(dá)式迷你書》知識(shí)點(diǎn)小抄本

    摘要:介紹這周開始學(xué)習(xí)老姚大佬的正則表達(dá)式迷你書,然后習(xí)慣性的看完一遍后,整理一下知識(shí)點(diǎn),便于以后自己重新復(fù)習(xí)。感謝原書作者老姚,本文無意抄襲,只是作為自己知識(shí)點(diǎn)的整理,后續(xù)也會(huì)整理到自己的知識(shí)庫網(wǎng)站中。等價(jià)于,表示出現(xiàn)次。 showImg(https://segmentfault.com/img/remote/1460000018530584?w=919&h=449); 介紹 這周開始學(xué)習(xí)...

    zollero 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MobService

|高級(jí)講師

TA的文章

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