摘要:說來慚愧,做前端快三年對于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規(guī)則,這次項目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。
說來慚愧,做前端快三年對于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規(guī)則,這次項目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。
實例化正則對象對象字面量
/pattern/attributes
正則對象由這兩部分構(gòu)成pattern(匹配規(guī)則)+attributes(修飾符)
var reg = /is/
這樣就成功的實例化一個正則表達(dá)式對象,接著我們?nèi)?yīng)用它
字符串的replace函數(shù)接受兩個參數(shù),第一個參數(shù)可以是字符串或者正則表達(dá)式,第二個參數(shù)是需要替換的字符串,這樣我們就成功把小寫的’is‘替換成了大寫的’IS‘
好多同學(xué)看那一串符號又開始頭暈了,別急,聽我慢慢道來
我們先來拆解這個正則表達(dá)式
首先開頭結(jié)尾的//是必須的,然后是兩個’b‘,代表著單詞的開頭或結(jié)尾,也就是單詞的分界處,最后中間的is是需要匹配的字符串。連起來意思就是匹配字符串中的is,并且前后必須要有分界,也就是說’isisisisis‘這里的is不能替換成’ISISISISIS‘
好了,有同學(xué)會問,為什么句子中的第二個’is‘沒有被替換,為什么我們沒看到所謂的那個修飾符。我們再改寫一下這個正則對象
發(fā)現(xiàn)多了一個修飾符g,代表全局(globle)搜索,這樣就可以匹配字符串中的所有的’is‘
構(gòu)造函數(shù)
var reg = new RegExp(pattern,attributes)
var reg = new RegExp("is","g") === var reg = /is/g
這里需要解釋下為什么同樣的匹配規(guī)則卻多了兩個
那是因為在js語法中,需要轉(zhuǎn)義,所以在這里的構(gòu)造函數(shù)參數(shù)中需要把轉(zhuǎn)義
g--globe
這個在之前的例子中大家已經(jīng)見識過了,就是全局搜索,默認(rèn)匹配到第一個就會停止
i--ignore case
忽略大小寫,默認(rèn)大小寫敏感
m--multiple lines
多行搜索
各種規(guī)則元字符
正則表達(dá)式有兩種基本字符類型組成--原義文本字符和元字符
原義文本字符:字母數(shù)字這種無需轉(zhuǎn)義的字符
元字符:在正則表達(dá)式中有特殊含義的非字母字符
* + ? $ ^ . | () {} []
字符類
我們可以用元字符[]來構(gòu)造簡單的類
比如說:[abc]就把abc三個字母歸為了一類,表達(dá)式可以匹配這一類字符
字符類取反
使用元字符^表示不屬于創(chuàng)建的類中的字符
范圍類
如果要是利用字符類匹配26個英文字母難道要一一寫出來么,哈哈哈,too young too simple
使用范圍類[a-z]匹配所有的26個英文字母,相加匹配條件就直接加在[]里面。
比如說[a-zA-Z0-9]匹配大小寫的英文字母和0-9的數(shù)字
預(yù)定義類
看一個例子:匹配ab+數(shù)字+任意字符的字符串
在學(xué)習(xí)預(yù)定義類之前我們的寫法是
ab[0-9][^/n/r]
現(xiàn)在我們學(xué)習(xí)了預(yù)定義類之后就可以這樣
abd.
邊界
這里的單詞邊界在最早的例子中我們已經(jīng)見識過了,現(xiàn)在我們對比一下b和B的區(qū)別
^和$的用法
需要注意的是^和$在正則中的位置
量詞
如果我們需要匹配連續(xù)出現(xiàn)100次數(shù)字的字符串難道要寫100個吧
偉大的js語言當(dāng)然不會這么傻了,這不引入了量詞的概念么
這一次的例子我們結(jié)合接下來的概念一起理解
貪婪模式與非貪婪模式這個例子中我們把0-9這九個數(shù)字先是用{3,6}來全局匹配,發(fā)現(xiàn)匹配出兩個NB
我來解釋一下,正則表達(dá)式默認(rèn)是貪婪模式匹配,即在量詞范圍中取最大的那個來匹配,所以第一個才會出現(xiàn)兩個NB,1-6匹配一個NB,7-9匹配一個NB。而第二個匹配范圍是{3,7},結(jié)果是NB89,因為最大值是7,所以1-7匹配成NB,而剩下的8,9達(dá)不到3個,所以沒有匹配成功
這個非貪婪模式和貪婪模式相反,即取最小值來匹配,用法是在量詞后面加?。
正確設(shè)置匹配模式對于處理復(fù)雜的正則是很有益處的
現(xiàn)在有這樣的需求,匹配wensnb這個字符串出現(xiàn)三次,是不是有的同學(xué)會說
wensnb{3}
這樣當(dāng)然是錯啦,因為只會匹配b出現(xiàn)三次,這時候就需要分組的概念
()可以起到分組的效果
或
用 | 表示或,下面的例子展示或在分組中的應(yīng)用
()把nb和123分組,并且用|表示兩者取其一
反向引用
利用$進(jìn)行分組中的引用,分別把分組中的內(nèi)容對應(yīng)$1....$n
忽略引用
并不是所有的分組我們都希望引用,用?:來忽略引用
我們把上個例子中的第二個引用忽略,所以引用個數(shù)由3變成2個,因此找不到$3
原來對應(yīng)$3的24現(xiàn)在變成了$2,而$1不變
大家聽這個名字前瞻就知道一定有一個后顧和他對應(yīng),說的沒錯,只不過在js語法中的正則不支持后顧,所以我們只關(guān)注前瞻就夠了
我們先來定義“前”:
在正則表達(dá)式中匹配是由文本頭部到尾部(左到右),所以這個“前”代表的是文本的尾部
下面來定義前瞻:
正則表達(dá)式匹配到規(guī)則時再向前檢查是否符合斷言或者不符合斷言(也是正則)
正向和負(fù)向前瞻的區(qū)別就是匹配到正則之后是否符合斷言,符合斷言稱為正向前瞻,不符合就是負(fù)向前瞻
下面來看一個例子
在這個正向前瞻中,匹配一個單詞字符(w不僅代表單詞,還代表數(shù)字下劃線)并且前面的還要符合數(shù)字1-3這個斷言才行,因此我們把w e n這三個字符匹配到了
正則表達(dá)式的屬性和方法
屬性
在文章的開始我們介紹了修飾符globle,ignoreCase,multilines 其實這個都是正則表達(dá)式的屬性,并且有兩個我們沒有說lastIndex和source 這五個屬性都是只讀,不能修改
方法
RegExp.prototype.test(str) //匹配傳入的字符串符不符合正則規(guī)則(true or false)
RegExp.prototype.exec(str)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/82275.html
摘要:分組小括號功能較多有三種功能,作用一,把單獨的項組合成子表達(dá)式。作用三,允許后面引用前面的表達(dá)式。如果這時的正則表達(dá)式是一個非全局的,那么和正則表達(dá)式方法拿到的結(jié)果相同。,也可以接受一個正則表達(dá)式作為參數(shù)。 正則表達(dá)式創(chuàng)建字面量創(chuàng)建,a = /abc/gim;構(gòu)造函數(shù)創(chuàng)建,a = new RegExp(abc,gim)正則表達(dá)式中的特殊字符,[...] 方括號中的任意字符[^...] ...
摘要:第二階段該部分內(nèi)容是學(xué)習(xí)正則的第二篇內(nèi)容,點擊第一部分查看第一部分的內(nèi)容。 第二階段 該部分內(nèi)容是學(xué)習(xí)正則的第二篇內(nèi)容,點擊第一部分查看第一部分的內(nèi)容。 這部分學(xué)習(xí)的內(nèi)容包括: 分組 斷言 匹配模式(貪婪和懶惰) 分組 我們可以通過量詞匹配一個字符多次,但是如果我們想要匹配多個字符多次,就需要用到分組,比如下面一個例子 // 匹配字母和數(shù)字連續(xù)出現(xiàn)三次的字符 let str = a...
摘要:正則表達(dá)式作為前端學(xué)習(xí)的一個知識點,是每個合格的前端開發(fā)都應(yīng)該掌握它的用法。元字符一般情況下,正則表達(dá)式的一個字符對應(yīng)字符串的一個字符。 正則表達(dá)式作為前端學(xué)習(xí)的一個知識點,是每個合格的前端開發(fā)都應(yīng)該掌握它的用法。正則表達(dá)式的學(xué)習(xí)確實不難,語法和應(yīng)用也非常簡單,能夠快速入門,很輕松的就能寫出簡單的表達(dá)式來對字符串執(zhí)行某些操作。網(wǎng)上也有標(biāo)題黨說一杯咖啡的時間就能學(xué)會。能學(xué)會嗎?能!但要真...
閱讀 2657·2021-10-19 11:41
閱讀 2482·2021-09-01 10:32
閱讀 3430·2019-08-29 15:21
閱讀 1871·2019-08-29 12:20
閱讀 1215·2019-08-29 12:13
閱讀 682·2019-08-26 12:24
閱讀 2592·2019-08-26 10:26
閱讀 904·2019-08-23 18:40