JavaScript正則表達(dá)式及其方法詳細(xì)介紹
一、正則表達(dá)式的介紹:
1、含義:
正則表達(dá)式用來(lái)定義一個(gè)規(guī)則,是
Js
中的一個(gè)對(duì)象。
2、作用:
① 計(jì)算機(jī)可以檢查一個(gè)字符串是否符合規(guī)則
② 將字符串中符合規(guī)則的內(nèi)容進(jìn)行提取
二、正則表達(dá)式的創(chuàng)建:
1、 通過(guò)構(gòu)造函數(shù)創(chuàng)建:new RegExp(規(guī)則, 標(biāo)識(shí))
① 標(biāo)識(shí) / 匹配模式:
(1)匹配模式的數(shù)據(jù)類型:字符串
(2)匹配模式取值:
i:忽略大小寫
g:全局匹配模式
var reg = new RegExp('a','i'); consoole.log(reg) // /a/i
② 使用場(chǎng)景:動(dòng)態(tài)創(chuàng)建規(guī)則
③ 注意事項(xiàng):
當(dāng)使用轉(zhuǎn)義字符(\
)的時(shí)候,需要寫兩個(gè) \\
var reg = new RegExp('\\w','i'); consoole.log(reg) // /\w/i
2、 字面量創(chuàng)建:var 變量 = /規(guī)則/標(biāo)識(shí)
var reg = /a/i ; consoole.log(reg) // /a/i
三、正則表達(dá)式的語(yǔ)法:
1、 或 的表示:
① | :表示整體的或
// 匹配ab或c或de的字符串 let reg = /ab|c|de/; let str = 'c' let result = reg.test(str) console.log(result) // true
② [] :表示字符集 – 只要有某個(gè)字符就行
// 匹配任意包含a或b或c或d的字符串 let reg = /[abcd]/; let str = 'cd' let result = reg.test(str) console.log(result) // true
2、 任意的小寫字母:
① [a-z]:
// 匹配任意包含a到z之間的內(nèi)容 let reg = /[a-z]/; let str = 'c' let result = reg.test(str) console.log(result) // true
② /[a-z]/i:
// 匹配任意忽略大小寫的包含a到z之間的內(nèi)容 let reg = /[a-z]/i; let str = 'H' let result = reg.test(str) console.log(result) // true
2、 任意的大寫字母:
① [A-Z]:
// 匹配任意包含A到Z之間的內(nèi)容 let reg = /[A-Z]/; let str = 'c' let result = reg.test(str) console.log(result) // false
② /[A-Z]/i:
// 匹配任意忽略大小寫的包含A到Z之間的內(nèi)容 let reg = /[A-Z]/i; let str = 'c' let result = reg.test(str) console.log(result) // true
3、 任意字母:[a-zA-Z]
// 匹配任意字母 let reg = /[a-zA-Z]/; let str = 'cfff' let result = reg.test(str) console.log(result) // true
4、任意數(shù)字:
① [0-9]:
// 匹配任意數(shù)字 let reg = /[0-9]/; let str = '123' let result = reg.test(str) console.log(result) // true
② \d:
// 匹配任意除了0到9之外的內(nèi)容 let reg = /\d/; let str = 'cd123d' let result = reg.test(str) console.log(result) // true
5、除了XXX:[^ ]
// 匹配任意除了包含a或b之外的內(nèi)容 let reg = /^[abb]/; let str = 'bc' let result = reg.test(str) console.log(result) // true
6、匹配除了數(shù)字之外的:
① [^0-9]:
// 匹配任意除了0到9之外的內(nèi)容 let reg = /[^0-9]/; let str = '111ccc' let result = reg.test(str) console.log(result) // true
② \D:
// 匹配任意除了0到9之外的內(nèi)容 let reg = /\D/; let str = '111ccc' let result = reg.test(str) console.log(result) // true
7、除了換行符之外的任意字符:.
// 匹配除了換行符之外的任意字符 let reg = /./; let str = '\n' let result = reg.test(str) console.log(result) // false
8、轉(zhuǎn)義字符:\
// 匹配. let reg = /\./; let str = 'ab.c' let result = reg.test(str) console.log(result) // true
9、匹配任意的字母、數(shù)字、下劃線:
① \w:
let reg = /\w/; let str = '&111&' let result = reg.test(str) console.log(result) // true
② [A-z0-9_]:
let reg = /[A-z0-9_]/; let str = '&111&' let result = reg.test(str) console.log(result) // true
10、匹配除了任意的字母、數(shù)字、下劃線之外的任意內(nèi)容:
① \W:
let reg = /\W/; let str = '11sA!' let result = reg.test(str) console.log(result) // true
② [^A-z0-9_]:
let reg = /[^A-z0-9_]/; let str = '11sA!' let result = reg.test(str) console.log(result) // true
11、匹配空格:\s
let reg = /\s/; let str = ' 11sA ' let result = reg.test(str) console.log(result) // true
12、除了空格之外的任意內(nèi)容:\S
let reg = /\S/; let str = ' aa' let result = reg.test(str) console.log(result) // true
13、單詞邊界的任意內(nèi)容:\b
① 單詞邊界含義:?jiǎn)卧~左右兩邊和非單詞的位置,同類無(wú)界。
② 作用:用來(lái)精準(zhǔn)的匹配單詞
let reg = /\bchild\b/; let str = 'children' let result = reg.test(str) console.log(result) // false
14、除了單詞邊界之外的任意內(nèi)容:\B
① 非單詞邊界含義:?jiǎn)卧~內(nèi)部的字符之間的位置。
② 使用:
// 非單詞邊界處的“cat” let reg = /\Bcat\B/g; let str = "The cat scattered his food all over the catacomb."; let result = str.match(reg) console.log(result) // ['cat']
15、匹配開頭:^
// 匹配當(dāng)前內(nèi)容是否以a開頭 let reg = /^a/; let str = ' aa' let result = reg.test(str) console.log(result) // false
16、匹配結(jié)尾:$
// 匹配當(dāng)前內(nèi)容是否以a結(jié)尾 let reg = /a$/; let str = ' aa' let result = reg.test(str) console.log(result) // true
17、完全匹配:^ $
要求字符串和正則完全匹配
let reg = /^a$/; let str = "a"; let result = reg.test(str) console.log(result) // true
四、量詞:設(shè)置一個(gè)內(nèi)容出現(xiàn)的次數(shù)
量詞只對(duì)它前邊的一個(gè)內(nèi)容起作用
1、出現(xiàn)m次:{m}
// 匹配是否有出現(xiàn)3次的a let reg = /a{3}/; let str = "aaa123"; let result = reg.test(str) console.log(result) // true
// 匹配是否有只出現(xiàn)3次的a let reg = /^a{3}$/; let str = "aaaa"; let result = reg.test(str) console.log(result) // false
// 匹配出現(xiàn)3次的字符,字符取值a到z let reg = /[a-z]{3}/; let str = "acd"; let result = reg.test(str) console.log(result) // true
// 匹配出現(xiàn)3次的字符串a(chǎn)b let reg = /(ab){3}/; let str = "acd"; let result = reg.test(str) console.log(result) // false
2、 出現(xiàn)m-n次:{m,n}
// 匹配出現(xiàn)1到3次的a let reg = /a{1,3}/; let str = "ahhh"; let result = reg.test(str) console.log(result) // true
3、 出現(xiàn)m次以上:{m,}
// 匹配出現(xiàn)3次以上的a let reg = /a{3,}/; let str = "aa123"; let result = reg.test(str) console.log(result) // false
4、 至少出現(xiàn)一次:
① +:
// 匹配至少出現(xiàn)1次的a let reg = /a+/; let str = "aaa123"; let result = reg.test(str) console.log(result) // true
② {1,}:
// 匹配至少出現(xiàn)1次的a let reg = /a{1,}/; let str = "aaa123"; let result = reg.test(str) console.log(result) // true
5、出現(xiàn)0次或者多次(任意次數(shù)):
① *:
// 匹配出現(xiàn)0次或者多次的a let reg = /a*/; let str = "123"; let result = reg.test(str) console.log(result) // true
② {0,}:
// 匹配出現(xiàn)0次或者多次的a let reg = /a{0,}/; let str = "123"; let result = reg.test(str) console.log(result) // true
6、出現(xiàn)0次或者1次:
① ?:
// 匹配出現(xiàn)0次或者1次的a let reg = /a?/; let str = "b123"; let result = reg.test(str) console.log(result) // false
② {0,1}:
// 匹配出現(xiàn)0次或者1次的a let reg = /a{0,1}/; let str = "b123"; let result = reg.test(str) console.log(result) // false
五、正則表達(dá)式的方法:
1、 通過(guò)正則表達(dá)式檢查一個(gè)字符串是否符合規(guī)則:
① 正則表達(dá)式.test(字符串):符合返回 true
// 判斷當(dāng)前字符串是否含有 a let reg = new RegExp('a', 'i'); let str = 'abc'; let result = reg.test(str); console.log(result) // true
2、將一個(gè)字符串拆分為一個(gè)數(shù)組:字符串.split(正則表達(dá)式):
全局匹配
// 根據(jù)任意字母拆分字符串 let reg = /[A-z]/; let str = 'a1b2c3d4'; let result = str.split(reg) console.log(result) // ['', '1', '2', '3', '4']
3、搜索字符串中是否含有指定內(nèi)容:字符串.search(正則表達(dá)式):
search
和indexOf
的區(qū)別:indexOf
的參數(shù)只能是字符串,search
的參數(shù)可以是正則表達(dá)式。
只會(huì)查找第一個(gè),即使設(shè)置了全局匹配,也沒有用
如果搜索到指定內(nèi)容,則會(huì)返回第一次出現(xiàn)的索引,如果沒有搜索到,則返回 -1。
// 查找第一個(gè)a加b或或f加c組成的內(nèi)容 let reg = /a[bef]c/; let str = 'hello abc hello aec afc'; let result = str.search(reg) console.log(result) // 6
4、將符合條件的內(nèi)容提取出來(lái):
① 字符串.match(正則表達(dá)式):
默認(rèn)情況下,match只會(huì)找到第一個(gè)符合要求的內(nèi)容,將匹配到的內(nèi)容封裝到一個(gè)數(shù)組中返回。設(shè)置正則表達(dá)式的全局匹配模式,會(huì)匹配所有的內(nèi)容
// 不區(qū)分大小寫,全局匹配所有字母 let reg = /[A-z]/ig; let str = 'a1b2c3d4ABCD'; let result = str.match(reg) console.log(result) // ['a', 'b', 'c', 'd', 'A', 'B', 'C', 'D']
② 字符串.matchAll(正則表達(dá)式):
必須設(shè)置正則表達(dá)式的全局匹配模式!
返回值是一個(gè)迭代器
RegExpStringIterator {}
,需要使用for-of
進(jìn)行遍歷.
let reg = /[A-z]/g; let str = 'a1b2c3d4ABCD'; let result = str.matchAll(reg) console.log(result) // RegExpStringIterator {} let arr = [] for(let i of result) { arr.push(i) } console.log(arr)
③ 正則表達(dá)式.exec(字符串):
默認(rèn)只會(huì)替換匹配到的第一個(gè)內(nèi)容
// 匹配所有符合axc格式的第一個(gè)內(nèi)容 let reg = /a[a-z]c/; let str = "abcadcaecacc"; let result = reg.exec(str) console.log(result) // ['abc', index: 0, input: 'abcadcaecacc', groups: undefined]
Tips: 設(shè)置正則表達(dá)式的全局匹配模式,每調(diào)用一次方法就會(huì)匹配下面的內(nèi)容
// 匹配所有符合axc格式的內(nèi)容 let reg = /a[a-z]c/ig; let str = "abcadcaecacc"; console.log(reg.exec(str)) // ['abc', index: 0, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['adc', index: 3, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['aec', index: 6, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['acc', index: 9, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // null
將需要提取的分組內(nèi)容用()進(jìn)行包裹
// 匹配所有符合axc格式的內(nèi)容,并且將分組的內(nèi)容進(jìn)行提取 let reg = /a([a-z])c/ig; let str = "abcadcaecacc"; console.log(reg.exec(str)) //['abc', 'b', index: 0, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['adc', 'd', index: 3, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['aec', 'e', index: 6, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // ['acc', 'c', index: 9, input: 'abcadcaecacc', groups: undefined] console.log(reg.exec(str)) // null
獲取所有符合規(guī)則的分組:使用循環(huán)
// 匹配所有符合axc格式的內(nèi)容,并且將分組的內(nèi)容進(jìn)行提取。 let reg = /a(([a-z])c)/ig; let str = "abcadcaecacc"; let result = reg.exec(str); let arr = [] while(result) { arr.push({ str: result[0], group1: result[1], group2: result[2], }) result = reg.exec(str); } console.log(arr) // [ // { // "str": "abc", // "group1": "bc", // "group2": "b" // }, // { // "str": "adc", // "group1": "dc", // "group2": "d" // }, // { // "str": "aec", // "group1": "ec", // "group2": "e" // }, // { // "str": "acc", // "group1": "cc", // "group2": "c" // } // ]
5、內(nèi)容替換:字符串.replace(正則表達(dá)式, 新內(nèi)容)
默認(rèn)只會(huì)替換匹配到的第一個(gè)內(nèi)容
// 將匹配到的第一個(gè)a替換為(●ˇ?ˇ●) let reg = /a/; let str = 'a1b2a3d4ABaD'; let result = str.replace(reg,'(●ˇ?ˇ●)') console.log(result) // (●ˇ?ˇ●)1b2a3d4ABaD
六、 常用的正則:
1、去除開頭和結(jié)尾的空格:
var reg = /^\s+|\s+$/g var str = " hell o " str.replace(reg,"") // 結(jié)果:hell o
2、輸入框中只允許輸入正數(shù)(包含小數(shù)):
onkeyup="value= (value.replace(/[^.0-9]/,'').replace(/.*?(\d+\.?\d*).*/g,'$1')).replace(/^0+/,'0')"
總結(jié)
到此這篇關(guān)于JavaScript正則表達(dá)式及其方法詳細(xì)介紹的文章就介紹到這了,更多相關(guān)js正則表達(dá)式及方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript中的startWith和endWith的幾種實(shí)現(xiàn)方法
javascript中的startWith和endWith的幾種實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-05-05HTML 自動(dòng)伸縮的表格Table js實(shí)現(xiàn)
在開發(fā)的過(guò)程中,表格Table有個(gè)缺陷,如果一行中某個(gè)單元格的超過(guò)一行,表格就不夠美觀了。2009-04-04用JS寫一段判斷搜索引擎來(lái)路并且屏蔽PC的跳轉(zhuǎn)代碼
以下是用JS寫的判斷搜索引擎來(lái)路并屏蔽PC跳轉(zhuǎn)的代碼,需要的朋友可以參考下2023-12-12用js腳本控制asp.net下treeview的NodeCheck的實(shí)現(xiàn)代碼
根據(jù)TreeView2.js修改后的TreeView父節(jié)點(diǎn)與子節(jié)點(diǎn)的CheckBox聯(lián)動(dòng).2010-03-03js隨機(jī)顏色代碼的多種實(shí)現(xiàn)方式
本篇文章小編為大家介紹,js隨機(jī)顏色代碼的多種實(shí)現(xiàn)方式。需要的朋友參考下2013-04-04WebGIS開發(fā)中不同坐標(biāo)系坐標(biāo)轉(zhuǎn)換問(wèn)題解決基本步驟
這篇文章主要介紹了如何在JavaScript中使用proj4庫(kù)進(jìn)行坐標(biāo)系轉(zhuǎn)換的基本步驟,包括安裝、示例、自定義坐標(biāo)系定義、擴(kuò)展以及一些常見EPSG代碼對(duì)照表,需要的朋友可以參考下2025-01-01iframe里使用JavaScript控制主頁(yè)轉(zhuǎn)向的方法
這篇文章主要介紹了iframe里使用JavaScript控制主頁(yè)轉(zhuǎn)向的方法,涉及使用javascript實(shí)現(xiàn)iframe頁(yè)面跳轉(zhuǎn)的技巧,需要的朋友可以參考下2015-04-04Javascript本地存儲(chǔ)localStorage看這一篇就夠了
這篇文章主要給大家介紹了關(guān)于Javascript本地存儲(chǔ)localStorage的相關(guān)資料,localStorage會(huì)可以將第一次請(qǐng)求的數(shù)據(jù)直接存儲(chǔ)到本地,這個(gè)相當(dāng)于一個(gè)5M大小的針對(duì)于前端頁(yè)面的數(shù)據(jù)庫(kù),需要的朋友可以參考下2024-07-07