最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文徹底揭秘正則表達式的基礎(chǔ)語法與應用

 更新時間:2026年03月08日 09:22:37   作者:WHOVENLY  
正則表達式是程序員和數(shù)據(jù)工作者的必備技能,但復雜的語法常令人望而生畏,這篇文章主要介紹了正則表達式基礎(chǔ)語法與應用的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

正則表達式是強大的文本處理工具。從字符類到量詞,再到分組與選擇,本篇文章將帶你深入了解正則表達式的基礎(chǔ)語法和在實際場景中的廣泛應用。無論你是初學者還是需要快速復習,本篇都將為你提供詳盡而易于理解的指引。

一、正則表達式屬性(修飾符)

修飾符用于執(zhí)行不區(qū)分大小寫和全局的搜索

1.【i】不區(qū)分大小寫

var reg1 = /abc/
var reg2 = /abc/i
var str1 = 'ABC'
console.log(reg1.test(str1))//false
console.log(reg2.test(str1))//true

2.【g】全局匹配

var reg3 = /aa/
var reg4 = /aa/g
var str2 = "aabaaaab"
console.log(str2.match(reg3))//["aa"]
console.log(str2.match(reg4))//["aa","aa","aa"]

3.【m】執(zhí)行多行匹配

var reg5 = /^ab/g
var reg6 = /^ab/gm
var str3 = "abcd\nabc"
console.log(str3.match(reg5))//["ab"]
console.log(str3.match(reg6))//["ab","ab"]

二、正則表達式模式

用于查找某個范圍內(nèi)的字符

1.【[]】

查找方括號之間的任何字符,一個方括號中寫的是一個字符的取值范圍

  • 0-9表示所有數(shù)字;a-z表示所有小寫字母;A-Z表示所有大寫字母;A-z表示所有大小寫字母
  • 在[]中使用表示非的意思,例如/[0-9]/也就是匹配非數(shù)字類型的內(nèi)容
// 例如下面要獲取三個數(shù)字的字符串
var reg7 = /[0-9][0-9][0-9]/g
var reg8 = /[^0-9][^0-9][^0-9]/g
var str4 = "121231ko23puu123"
console.log(str4.match(reg7))//["121","231","123"]
console.log(str4.match(reg8))//["puu"]

2.【()】

在括號中寫入|表示或,也就是只要滿足|前或者|后任意一個表達式即可

var reg9 = /(abc|bcd)/g
var str5 = "abcabbcd"
console.log(str5.match(reg9))//['abc', 'bcd']

三、正則表達式的元字符

是擁有特殊含義的字符,其實和表達式是一個東西

1.【\w】和【\W】

w意思是word,\w完全等于[A-z0-9]
W是非w,完全等于[^\w]

var reg10 = /\w\W/g
var str5 = "a;0,op"
console.log(str5.match(reg10))//['a;', '0,']

2.【\d】和【\D】

d代表0-9的數(shù)字,等同于[0-9]
D是非d,完全等于[^/d][^0-9]

var reg11 = /\d\D\D/g
var str6 = "1jj2lo990ol"
console.log(str6.match(reg11))//['1jj', '2lo', '0ol']

3.【\s】和【\S】

s代表空白字符,即空格和\t\n\r\v\f,等同于[\t\n\r\v\f ]
S是非s,完全等于[/s]和[\t\n\r\v\f])
在正則表達式中寫空格就代表空格

var reg12 = /\s/g
var str7 = "\n123\f123 1"
console.log(str7.match(reg12))//['\n', '\f', ' ']

4.【\b】和【\B】

b代表單詞邊界
B是非b,表示非單詞邊界,完全等于[^/b]
單詞邊界在字符串里面可以看成空格

var reg12 = /\b/g
var str8 = "1231231"
var str9 = "1231231 123kk"
var str10 = "1231231 123kk "
console.log(str8.match(reg12))//['', '']
console.log(str9.match(reg12))//['', '', '', '']
console.log(str10.match(reg12))//['', '', '', '']
var reg13 = /\bc/g
var str11 = "cth cujcc"
console.log(str11.match(reg13))//['c', 'c']

5.【\t】、【\n】、【\r】、【\b】、【\f】

/t:制表符;\n:換行符;\r:回車符;\v:垂直換行符;\f:換頁符;

var reg14 = /ac\ts/g
var str12 = "ac\tsdf"
var str13 = "ac sdf"http://這里的空是用tab符打出來的,但是系統(tǒng)是不能識別的,這幾個都是如此
console.log(str12.match(reg14))//['ac\ts']
console.log(str13.match(reg14))//null

6.【\udddd】

這是四位的unicode編碼(包含了漢字),且unciode也可以寫成區(qū)間/[\u3000-\ua000]/

var reg15 = /\u4f60\u597d/ //這里是去找的你好的unicode編碼,直接百度找在線轉(zhuǎn)換即可
var str14 = "你好"http://
console.log(str14.match(reg15))//['你好']

7.【.】

查找單個字符,除了換行和行結(jié)束符,也就是/.=[^\r\n]

var reg16 = /./g
var str15 = "你 很\n\t帥"
console.log(str15.match(reg16))//['你', ' ', '很', '\t', '帥']

四、正則表達式的量詞(代表數(shù)量的詞)

1.【n+】

匹配任何包含至少一個n的字符串。這個變量可以出現(xiàn)1到無數(shù)次

var reg17 = /\w+/g
var str16 = "abc"
var str17 = "abc\ndb"
console.log(str16.match(reg17))//['abc']
console.log(str17.match(reg17))//['abc', 'db']

2.【n*】

匹配任何包含零個或多個n的字符串。這個變量可以出現(xiàn)0到無數(shù)次

var reg18 = /\w*/g
var reg19 = /\d*/g
var str18 = "abc"
var str19 = "abcdb"
console.log(str18.match(reg18))//['abc', '']
console.log(str19.match(reg18))//['abcdb', ''] 光標在b后面,b后面有邏輯上的距離,*如果是零,匹配的是空,\w會先把能是被的值先識別,到最后識別不了了,才試一下*零,匹配空
console.log(str19.match(reg19))//['', '', '', '', '', ''] 光標在a前面,邏輯上有個距離,匹配了一個零,空串,然后光標移動到a后面,邏輯上又有距離,有宜配了一個零,空串,所以有多少個光標定位點就有多少個空串

3.【n?】

匹配任何包含零個或一個n的字符串。

var reg20 = /\w?/g
var str20 = "aaaaaaaaaa"
console.log(str20.match(reg20))//['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', '']

4.【n{X}】

匹配包含X個n的序列的字符串。

var reg21 = /\w{3}/g
var str21 = "aaaaaaaaaa"
console.log(str21.match(reg21))//['aaa', 'aaa', 'aaa']

5.【n{X,Y}】

匹配包含X至Y個n的序列的字符串。

var reg22 = /\w{3,5}/g
var str22 = "aaaaaaaaaaa"
console.log(str22.match(reg22))//['aaaaa', 'aaaaa']

6.【n{X,}】

匹配包含至少X個n的序列的字符串。

var reg23 = /\w{3,}/g
var str23 = "aaaaaaaaaaa"
console.log(str23.match(reg23))//['aaaaaaaaaaa']

7.【n$】

匹配任何以n結(jié)尾的字符串。

var reg24 = /[0-9]b$/g
var str24 = "0b9o34hb9b"
console.log(str24.match(reg24))//['9b']
// ^n 匹配任何以n開頭的字符串。
var reg24 = /^[0-9]/g
var str24 = "00934h"
console.log(str24.match(reg24))//['0']

8.【?=n】

匹配任何其后緊接指定字符串n的字符串。正向預查

var reg25 = /a(?=b)/g
var str25 = "abaabaaaa"
console.log(str25.match(reg25))//['a', 'a']

9.【?!n】

匹配任何其后沒有緊接指定字符串n的字符串。正向斷言

var reg26 = /a(?!b)/g
var str26 = "abaabaaaa"
console.log(str26.match(reg26))//['a', 'a', 'a', 'a', 'a']

五、正則表達式的對象屬性

1.【constructor】

返回創(chuàng)建 RegExp 對象原型的函數(shù)。

var reg27 = /[0-9]/
console.log(reg27.constructor)//RegExp()

2.【global】

檢查是否設(shè)置了 “g” 修飾符。

var reg28 = /[0-9]/g
console.log(reg28.global)//true

3.【ignoreCase】

檢查是否設(shè)置了 “i” 修飾符。

var reg29 = /[0-9]/i
console.log(reg29.ignoreCase)//true

4.【lastIndex】

規(guī)定開始下一個匹配的索引。

var reg30 = /[0-9]/i
console.log(reg30.lastIndex)//0.沒匹配到返回0

5.【multiline】

檢查是否設(shè)置了 “m” 修飾符。

var reg31 = /[0-9]/m
console.log(reg31.multiline)//true

6.【source】

返回 RegExp 模式的文本。

var reg32 = /[0-9]/i
console.log(reg32.source)//[0-9]

六、正則表達式的對象方法

1.【exec()】

測試字符串中的匹配項。會返回找到的值,并確定其位置
①從前往后找,先返回第一個找到的值,并返回其位置,第二次會返回第二個找到的值,依次類推,直到?jīng)]有會返回null,再下一次就開始循環(huán)前面的步驟
②可以通過修改lastIndex來修改當前的位置,會從這個位置開始往下找,從而影響exec獲取到的值是第幾個
③如果不加g,lastIndex就不會動,永遠返回的是第一個

var reg33 = /ab/g
var str27 = 'abababa'
console.log(reg33.exec(str27))//[0:'ab',index:0]
console.log(reg33.exec(str27))//[0:'ab',index:2]
console.log(reg33.exec(str27))//[0:'ab',index:4]
console.log(reg33.exec(str27))//null
console.log(reg33.exec(str27))//[0:'ab',index:0]
reg33.lastIndex = 4
console.log(reg33.exec(str27))//[0:'ab',index:4]
reg33.lastIndex = 3
console.log(reg33.exec(str27))//[0:'ab',index:4]

2.【test()】

測試字符串中的匹配項。返回 true 或 false。

var reg34 = /ab/
var str28 = 'abababa'
console.log(reg34.test(str28))//true

// toString():返回正則表達式的字符串值。
var reg35 = /ab/gi
console.log(reg35.toString())///ab/gi

七、正則表達式的拓展

【()】

這個括號還有一個子表達式的意思,正常來說括號寫了沒有用,也沒影響,但是再特殊情況,當你把式子當特殊括起來以后,
這個括號會記錄里面匹配的內(nèi)容,記錄完以后利用\幾可以反向引用出來

var reg36 = /(\w)\1\1\1/g
var str29 = 'aaaabbbb'
console.log(str29.match(reg36))//['aaaa','bbbb']
var reg37 = /(\w)\1(\w)\2/g
var str30 = 'aabbccdd'
console.log(str30.match(reg37))//['aabb', 'ccdd']
console.log(reg37.exec(str30))//[0:'aabb',1:'a',2:'b',...] 使用exec會返回子表達式的內(nèi)容,并且是正式的數(shù)據(jù)位,有下標的
var reg38 = /(\w)\1(\w)\2/
var str31 = 'aabbccdd'
console.log(str31.match(reg38))//[0:'aabb',1:'a',2:'b',...] 不用g匹配時,match也會返回子表達式的內(nèi)容,并且是正式的數(shù)據(jù)位,有下標的

八、支持正則表達式的 String 對象的方法

1.【search】

檢索與正則表達式相匹配的值。返回的不是-1則表示成功了,返回的時匹配的這個值所在的位置

var reg39 = /(\w)\1(\w)\2/g
var str32 = 'aabboojj'
var str33 = 'caabboojj'
var str34 = 'caaboj'
console.log(str32.search(reg39))//0
console.log(str33.search(reg39))//1
console.log(str34.search(reg39))//-1

2.【split】

把字符串分割為字符串數(shù)組。

var reg40 = /\d/g //使用數(shù)字分割
var str35 = 'aa8bb7cc9dd'
console.log(str35.split(reg40))//['aa', 'bb', 'cc', 'dd']
var reg41 = /(\d)/g //使用數(shù)字分割
var str36 = 'aa8bb8cc9dd'
console.log(str36.split(reg41))//['aa', '8', 'bb', '8', 'cc', '9', 'dd'] 如果使用了()子表達式,就會把子表達式的東西返回

3.【match】

找到一個或多個正則表達式的匹配。

var reg42 = /^[0-9]/g
var str37 = "00934h"
console.log(str37.match(reg42))//['0']

4.【replace】

替換與正則表達式匹配的子串。

var reg43 = /(\w)\1(\w)\2/g  //將aabb形式的內(nèi)容換成bbaa
var str38 = "aabb"
console.log(str38.replace(reg43, "$2$2$1$1"))//bbaa. $1和$2分別代表第一個和第二個子表達式的內(nèi)容,
console.log(str38.replace(reg43, function ($, $1, $2) { return $2 + $2 + $1 + $1 }))//bbaa. 也可以用函數(shù),第一個參數(shù)是正則表達式匹配的全局,第二和第三個參數(shù)則是第一個和第二個子表達式的內(nèi)容

九、補充

1.貪婪模式

正則表達式默認是貪婪匹配的,就是能匹配到的長度是越多越好的,可以通過在量詞后面幾個?將其變成非貪婪模式(能少就不多)

var reg44 = /a+/g
var reg45 = /a+?/g
var str39 = 'aaaa'
console.log(str39.match(reg44))//['aaaa']
console.log(str39.match(reg45))//['a', 'a', 'a', 'a']
//①??第一個問號是0-1的意思,加個問號就是能取0不取1.相當于第一個問好代表量詞,第二個問號叫取消他的匹配
var reg46 = /a??/g
var str40 = 'aaaa'
console.log(str40.match(reg46))//['', '', '', '', '']
//②*?的意思是能取0就不多取
var reg47 = /a*?/g
var str41 = 'aaaa'
console.log(str41.match(reg47))//['', '', '', '', '']

2.獲取一切的集合

用正則代表一切的集合可以使用好幾種方式,例如/[\s\S]/ /[\d\D]/都可以

總結(jié) 

到此這篇關(guān)于正則表達式基礎(chǔ)語法與應用的文章就介紹到這了,更多相關(guān)正則表達式基礎(chǔ)語法與應用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

济宁市| 舞钢市| 当阳市| 申扎县| 兴义市| 菏泽市| 马关县| 来安县| 吴旗县| 托克托县| 正定县| 巧家县| 宁城县| 常德市| 东源县| 庄浪县| 鹿邑县| 成武县| 肥乡县| 娄烦县| 和平县| 东乡族自治县| 加查县| 香河县| 花莲市| 酉阳| 施秉县| 莫力| 崇礼县| 枣庄市| 蒙山县| 云霄县| 泰安市| 弋阳县| 内乡县| 尚义县| 称多县| 兖州市| 汝州市| 土默特左旗| 启东市|