javascript正規表示式的基礎介紹

2023-07-24 21:37:00 字數 5439 閱讀 9736

正規表示式可以用來幹什麼?用來匹配字串中字元組合的模式。在平常的學習和工作中我們也經常用到正規表示式,比如表單的輸入框中使用對應的正規表示式去校驗輸入的**號碼格式是否正確等。

方式1:使用字面量,固定/表示式內容/

let reg = d/; 匹配0-9的數字
方式2:使用regexp建構函式。

let reg = new regexp('\d');匹配0-9的數字
備註:完整的特殊字元可以檢視官方文件哦,這裡只列舉部分常用的特殊字元。

示例:

let reg = d[a-za-z]+$匹配以數字開頭,小寫字母結尾,中間部分包含1個至多個大小寫字母。

2frzs').match(reg); 2frzs', index: 0, input: '2frzs', groups: undefined]

示例:匹配不區分小大寫的指定字元。

// 不新增可選標識。

let reg = a-z]/

asz').match(reg); s', index: 1, input: 'asz', groups: undefined]

新增ilet reg = a-z]/i

asz').match(reg); a', index: 0, input: 'asz', groups: undefined]

regexp.lastindex:標識索引從**開始下乙個匹配。

regexp.prototype.ignorecase:是否忽略大小寫。

regexp.prototype.global:針對字串中所有可能的匹配項測試正規表示式,還是僅針對第乙個匹配項。

regexp.prototype.sticky:是否是sticky

regexp.prototype.unicodeunicode功能是否開啟。

這些屬性可以用來檢查是否使用了可選引數。

正規表示式可以用於:

regexptest()exec()tostring()方法,compile()已棄用

stringmatch()matchallreplace()search()split()replaceall()方法。

test():使用正規表示式在字串中測試指定的值是否匹配,返回truefalse

let reg = d/ /匹配數字。

reg.test('aaasa') false

reg.test('aaa2a') true

示例:正規表示式新增全域性搜尋g標誌。

let reg = d/g //全域性匹配判斷是否包含數字。

reg.test('a8ab9g0') true

reg.test('a8ab9g0') true

reg.test('a8ab9g0') true

reg.test('a8ab9g0') false

reg.test('a8ab9g0') true

上面示例突然不理解了,為什麼連續使用test()輸出的結果會不一樣,有它自己的一套迴圈結果模式,示例是迴圈輸出true true true false?書都翻爛了終於找到了對它的解說。

解釋示例:

let reg = d/g

while (reg.test('a8ab9g0'))

console.log(reg.lastindex)

看到reg.lastindex想必你已經很清楚為什麼了吧,lastindex是當前表示式匹配內容的最後乙個字元的下乙個位置。在字串a2ab4g2中先全域性查詢匹配到,它的最後乙個字元的下乙個位置就是;然後再去查詢匹配字元,找到,進行第二次匹配,此時字元的下乙個位置就是了,依次類推,只要查詢的字串中存在匹配字元,lastindex的會依次變化。這種變化發生在識別符號g全域性搜尋的時候總結:如果正規表示式設定了全域性標誌,test()的執行會改變正規表示式的lastindex屬性,連續執行test()方法,後續執行將會從lastindex處開始匹配。

exex():使用正規表示式在字串中執行查詢匹配指定的值,返回乙個陣列,未匹配到返回null

示例1:

let reg = d/

reg.exec('a2ab4g2') 2', index: 1, input: 'a2ab4g2', groups: undefined]

exec()返回的是乙個陣列,第一項是匹配到的字串,第二項是原始字串基於0開始的索引位置,第三項是匹配的原始字串,第四項是乙個命名捕獲組物件,若未定義命名捕獲組,值為undefined示例2:

let reg = d/g

while (reg.exec('a8ab9g0'))

console.log(reg.lastindex)

可以看到,exec()test()方法在正規表示式新增了全域性標識g之後,都會去更新正規表示式物件的lastindex屬性。

tostring():返回乙個表示該正規表示式的字串。

let reg = d/g

reg.tostring('a2ab4g2') d/g"

注意:regexp物件是覆蓋object物件的tostring()方法,不是繼承object.prototype.tostring()match():在字串中執行查詢匹配,返回乙個陣列,未匹配返回null

str.match(reg)的目標引數是string,返回的陣列中,包含了匹配到的所有結果,沒有匹配到返回null

let reg = d/g

a2ab4g2').match(reg) /2', 4', 2']

ssssss').match(reg) /null

matchall():在字串中執行查詢所有匹配,返回乙個迭代器。

let reg = d/g

let result = a2ab4g2').matchall(reg);

console.log(array.from(result, x =>x[0]))2', 4', 2']

上例中,x是撒?比如第一項x的值為['2', index: 1, input: 'a2ab4g2', groups: undefined],是不是很眼熟呢?和exec()方法的返回值一樣。

search():在字串中查詢匹配到的第乙個項內容,返回匹配到的索引位置,不存在返回 -1。

let reg = d/g

a2ab4g2').search(reg);/1

ssss').search(reg);/1

split():使用正規表示式或字串分隔乙個字串,並將分隔後的子字串儲存到陣列中。

常用在我們想要將字串按某個規則分割為陣列的場景。

let reg = d/

a2ab4g2').split(reg); a', ab', g',

sgh2hfj').split(reg); sgh', hfj']

replace():在字串中查詢匹配的值,使用替換字串替換匹配到的值。

未新增全域性搜尋標識,如下面示例,可以看出replace()是替換第乙個匹配到的字元為指定字元。

let reg = d/

a2ab4g2').replace(reg, 'w');awab4g2

新增全域性搜尋標識,如下面示例,會把查詢到的所有字元進行替換操作。

let reg = d/g

a2ab4g2').replace(reg, 'w');awabwgw

replaceall():返回乙個新字串,替換全域性匹配到的字串。

let reg = d/g

a2ab4g2').replaceall(reg, 'w');awabwgw

注意:當replaceall使用的第乙個引數是regex時,必須設定全域性標識g,否則會報錯:uncaught typeerror: string.prototype.replaceall called with a non-global regexp argument at string.replaceall以上內容簡單的描述了j**ascript中正規表示式的基本建立與使用,後續介紹正規表示式的高階使用方法。

歡迎關注+點讚+收藏+評論+**原創不易,我會持續更新更多優質文章。

關注***前端開心果」,專注於前端技術的學習、分享與交流,包括web前端基礎知識、高階技術、學習資料、工具技巧、**教程、面試題等資訊。

使用 JavaScript 指令碼來進行複雜的查詢改寫

有這麼乙個需求 閘道器裡怎樣對跨集群搜尋進行支援的呢?我想實現 輸入的搜尋請求是lp 9200 index1 search這個索引在 3 個集群上,需要跨集群檢索,也就是閘道器能否改成lp 9200 cluster01 index1,cluster02,index1,cluster03 index1...

機械表和石英表的區別

鄭州手錶售後維修中心位於鄭州市二七區明主路10號華潤大廈2905室。雖然每個人都有手機和計時功能,但時鐘並沒有退出歷史舞台,因為時鐘不僅是計時工具,更是裝飾和寄託的載體。在購買手錶時,你會發現手錶的種類數不勝數,但人們更常見的石英表和機械表,這兩種更受歡迎。那麼石英表和機械表有什麼不同呢?我們和編輯...

華為“一人一表”的“表內資產”

多肽鏈 原創出品作者 嚴睿 宋思夢1.41億糖尿病患者 2.45億高血壓患者 3.3億心血管患者 在中國,龐大的慢性病人口基數和且還在快速增長的勢頭,是個嚴峻的挑戰。對於實現 健康中國 戰略的偉大目標來說,國民健康水平的提公升必須要掌握慢病管理的主動權,以緩解醫療系統及醫療支付帶來的巨大壓力。疫情改...