成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS核心知識點梳理——正則篇(上)

happyhuangjinjin / 816人閱讀

摘要:正則引言正則是一個前端必須掌握的知識。這里上篇先介紹正則的規(guī)則,下篇結(jié)合一些具體題目,帶大家重新學(xué)習(xí)鞏固一下正則,爭取面試給自己加分。

正則

引言

正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面試經(jīng)常坐蠟。這里上篇先介紹正則的規(guī)則,下篇結(jié)合一些具體題目,帶大家重新學(xué)習(xí)鞏固一下正則,爭取面試給自己加分。

簡介
介紹:用來處理字符串的一個規(guī)則

正則:判斷一個字符串是否符合我們的規(guī)則-> reg.test(str)
捕獲:把字符串中符合我們規(guī)矩的子字符捕獲到 ->reg.exec(str)

規(guī)則 生成正則的兩種方式

實例創(chuàng)建和使用字面量,但是要注意使用實例創(chuàng)建正式是可以使用變量進(jìn)行拼接的

正則表達(dá)式由兩種基本字符類型組成,原義文本字符和元字符

元字符:在正則表達(dá)式中具有特殊意義的字符,原義字符變元字符加""
元字符分類
邊界類
^ 開頭 $ 結(jié)尾  b 單詞邊界  B非單詞邊界
/engineer$/.test("I am an engineer") //true
量詞類
*: 零次到多次 
+:1次到多次
?: 0次或者1次
{n} 出現(xiàn)n次
{n,m} 出現(xiàn)n次到m次
   let reg = /1d{10}$/ //驗證手機(jī)號,第一位是1
范圍類
[a-z]  a-z之間的任何一個字符
[a-zA-Z] a-z以及A-Z之間的任何一個字符
"a1b2C3C4".replace(/[a-z]/g,"Q") //"Q1Q2C3C4"
字符類
x|y :x或y中的一個
[xyz]: x或者y或者z中的一個
[^a-z] 除了a-z以外的任何一個字符
[^xyz] 除了xyz以外的任何一個字符
預(yù)定義類
// .  除了回車和換行的所有字符 [^
]
// d 數(shù)字 [0-9]
//  s  空白字符 [	
x0Bf
]
// w 單詞 字符[A-Za-z0-9_]  //注意,.的范圍要比W范圍大,因為它還包括制表符之類的`注意只是一個字符而不是一個單詞`
"hello".replace(/w{2}$/g,"x")  //helx
修飾符以及正則對象屬性

修飾符:

i 忽略大小寫
g 全局匹配
m 多行匹配
注意這里設(shè)置了,在正則對象里的相應(yīng)屬性會改變
var a = /d/g
a.global  //true
var b = /d/
b.global  //false

正則對象屬性:

global ignore case  multiline lastIndex sourse
注意,lastindex在全局匹配里面會匹配一次改變一個,超出匹配范圍會被清零
var reg1 = /w/
var reg2 = /w/g
reg1.test("a") //true //reg1.lastIndex //0
reg1.test("a") //true //reg1.lastIndex //0
reg1.test("a") //true //reg1.lastIndex //0
reg2.test("a") //true //reg2.lastIndex //1
reg2.test("a") //false //reg2.lastIndex //0
reg2.test("a") //true //reg2.lastIndex //1
reg2.test("a") //false //reg2.lastIndex //0
貪婪模式和非貪婪模式

正則默認(rèn)是貪婪模式,會按盡可能多的匹配,在量詞后面加?可以取消貪婪性

123456.replace(/d{3,6}/g,"x") //由于有貪婪性,按6次匹配,結(jié)果為"x"
"123456".replace(/d{3,6}?/g,"x") //此時沒有貪婪性,但是有全局匹配,結(jié)果為"xx"
"123456".replace(/d{3,6}?/g,"x") //此時沒有貪婪性,局部匹配,結(jié)果為"x456"
分組以及或

或|,左邊的單詞(分組)或者右邊的單詞(分組)出現(xiàn)都可以
分組的目的是為了更好的捕獲,增加控制力 分組可以用num代表
注意或|的優(yōu)先級是最低的,比字符串串接的優(yōu)先級還要小,所以有/Bayron|casper/是匹配兩個單詞而不是n或者c的情況

bary{3}  //y重復(fù)3次
(bary){3} //單詞重復(fù)3次
Bayron|casper //兩個單詞的或   
Bayr(on|ca)sper //中間兩個字母隨便出現(xiàn)哪個都行,注意同時出現(xiàn)兩個是不匹配的
"Bayroncasper".replace(/Bayr(on|ca)sper/g,"x") //"Bayroncasper"
"Bayrcasper".replace(/Bayr(on|ca)sper/g,"x")  //"x"
前瞻和后顧

正則匹配的方向是從左向右,所以向右是前瞻,向左是后顧,斷言可以理解為規(guī)則,但是不參與匹配
(正向)前瞻就是在正則表達(dá)式匹配到規(guī)則的時候,向前檢查是否符合斷言
(正向)后顧就是在正則表達(dá)式匹配到規(guī)則的時候,向后檢查是否符合斷言
(負(fù)向)... 就是正則表達(dá)式匹配到規(guī)則的時候,向(前)后檢查是否不符合斷言

"Windows2000".replace(/Windows(?=2000)/g,"x")  //"x2000" 正向前瞻 ?=
"Windows2000".replace(/Windows(?!2000)/g,"x")  //"windows2000" 負(fù)向前瞻 ?!
"I has Windows2000".replace(/(?<=I has )Windows/g,"x")  //"I has x2000" 正向后顧 ?<=
"I has Windows2000".replace(/(?
方法
正則的方法

正則的方法只有兩個,test和exec

exec
一個在字符串中執(zhí)行查找匹配的RegExp方法,它返回一個數(shù)組(未匹配到則返回null)。   與字符串的match對應(yīng)   數(shù)組【匹配值,分組,index,input,】
這里注意,exec一次只匹配一個,匹配不到就會null。只有給修飾符g才能往下繼續(xù)匹配(使用while)
var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
console.log(myArray)
//["dbbd", "bb", index: 1, input: "cdbbdbsbz", groups: undefined]
---------------------------------------------------------------------
var regex1 = RegExp("foo*","g");
var str1 = "table football, foosball";
var array1;

while ((array1 = regex1.exec(str1)) !== null) {
  console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
  // expected output: "Found foo. Next starts at 9."
  // expected output: "Found foo. Next starts at 19."
}
test

一個在字符串中測試是否匹配的RegExp方法,它返回true或false。 與字符串的search對應(yīng)

字符串的方法
search,match

類似test,exec 但是全局調(diào)用match相對exec功能弱了一些,返回的數(shù)組元素沒有index或者input了

split

非常有用的一個方法,用來按規(guī)則分解字符串形成數(shù)組

"a1b2c3d4".split(/d/g)
// ["a","b","c","d"]
replace

非常非常有用的一個方法,全局匹配下由于能自動不斷匹配,非常方便。
注意如果參數(shù)是字符串會隱式轉(zhuǎn)換為

"a1b1".replace("1","x") // axb1   為什么會只替換一次呢,因為這里會給你隱式的轉(zhuǎn)換為正則表達(dá)式
"a1b1".replace(/1/g,"x") // axbx
"a1b1".replace(/d/g,function(match){ //匹配字符串,分組(沒有則沒有該參數(shù)),index,原字符
    return ~~match + 1
}) // a2b2

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

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

相關(guān)文章

  • JS核心識點梳理——正則(下)

    摘要:正則引言正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面試經(jīng)常坐蠟。這里上篇先介紹正則的規(guī)則,下篇結(jié)合一些具體題目,帶大家重新學(xué)習(xí)鞏固一下正則,爭取面試給自己加分。 正則 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 正則是一個前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面...

    jemygraw 評論0 收藏0
  • 前端開發(fā)收集 - 收藏集 - 掘金

    摘要:責(zé)編現(xiàn)代化的方式開發(fā)一個圖片上傳工具前端掘金對于圖片上傳,大家一定不陌生。之深入事件機(jī)制前端掘金事件綁定的方式原生的事件綁定方式有幾種想必有很多朋友說種目前,在本人目前的研究中,只有兩種半兩種半還有半種的且聽我道來。 Ajax 與數(shù)據(jù)傳輸 - 前端 - 掘金背景 在沒有ajax之前,前端與后臺傳數(shù)據(jù)都是靠表單傳輸,使用表單的方法傳輸數(shù)據(jù)有一個比較大的問題就是每次提交數(shù)據(jù)都會刷新頁面,用...

    ygyooo 評論0 收藏0
  • 『不再迷茫 - 正則表達(dá)式』JS正則要點梳理 持續(xù)更新

    摘要:寫在前面正在看的源碼看到了部分感覺以前看的正則表達(dá)式基礎(chǔ)知識已經(jīng)完全不夠用了現(xiàn)翻閱博客資料將一些中正則表達(dá)式難用的部分總結(jié)歸納方便自己和友翻閱正則分組重復(fù)匹配對于重復(fù)的匹配我們經(jīng)常使用到正則表達(dá)式的分組功能我們使用正則匹配地址來實踐一下假 [TOC] 寫在前面 - Lionad 正在看VueJS的源碼, 看到了HtmlParser部分, 感覺以前看的正則表達(dá)式基礎(chǔ)知識已經(jīng)完全不夠用了,...

    SQC 評論0 收藏0
  • JS核心識點梳理——變量

    摘要:核心知識點梳理數(shù)據(jù)篇看了一些資料,結(jié)合高程和對核心知識點進(jìn)行了梳理。所以,一共有種聲明變量的方法。凡是在聲明之前就使用這些變量,就會報錯。還是那句話,建議大家掌握核心知識點,細(xì)枝末節(jié)的東西就隨意啦。 JS核心知識點梳理——數(shù)據(jù)篇 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 看了一些資料,結(jié)合ES6、高程和MD...

    aristark 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<