創(chuàng)建方式
根據(jù) JavaScript高程 上面介紹,有兩種方式創(chuàng)建正則表達(dá)式:
new RegExp()
var reg = new RegExp('n', 'gi'); // 全局匹配字母n,且不區(qū)分大小寫。
- 其中第二個(gè)參數(shù)是可選的,三種值:
g:全文查找、i:不區(qū)分大小寫、m:多行查找;
/xxx/gi
var reg = /a/g; // 代表全局搜索a
常用方法
-
test()方法用于檢測一個(gè)字符串是否匹配某個(gè)模式,如果字符串中含有匹配的文本,則返回true,否則返回false。
var str = 'my name is Dave';
var reg = new RegExp('n', 'gi');
reg.test(str); // true
-
search()方法檢索與正則表達(dá)式相匹配的子字符串,并返回子串的起始位置。
var str= 'my name is busynnn';
console.log(str.search(/is/g)); // 8
-
match()存放匹配結(jié)果的數(shù)組。該數(shù)組的內(nèi)容依賴于 regexp 是否具有全局標(biāo)志 g。 如果沒找到匹配結(jié)果返回 null 。
var str = "The rain in SPAIN stays mainly in the plain";
var n=str.match(/ain/gi); // ain,AIN,ain,ain
4.replace()用傳入的字符串替換正則匹配的字符串:
eg: 替換敏感字
var prag = '大約一個(gè)月前,小米在小米5X發(fā)布會(huì)上同時(shí)發(fā)布了MIUI9系統(tǒng),和以往的系統(tǒng)相比,MIUI9系統(tǒng)的一大特點(diǎn)是應(yīng)用啟動(dòng)速度快,同時(shí)還可以通過新的幾大功能,如傳送門、信息助手、快速查找照片、分屏等功能全面提升手機(jī)使用效率。'
+ '自2010年8月16日發(fā)布以來, MIUI系統(tǒng)已連續(xù)更新超過340周。 小米聯(lián)合創(chuàng)始人、 MIUI負(fù)責(zé)人洪鋒透露, 截至目前, MIUI全球用戶已經(jīng)突破2 .8 億, 覆蓋142個(gè)國家地區(qū)。'
+ 'MIUI發(fā)布至今已經(jīng)過去整整七年時(shí)間, 從第一代到第九代, MIUI所承載的角色也發(fā)生了變化, 但洪鋒覺得無論如何, 作為一個(gè)手機(jī)系統(tǒng), MIUI的宗旨還是要滿足80 % 以上用戶的實(shí)際需求, 提升用戶使用手機(jī)的效率。'
+ '36 氪對洪鋒進(jìn)行了一次專訪, 談了談手機(jī)系統(tǒng)行業(yè)目前的整體局勢。 在語音交互和AI大行其道的今天, 作為手機(jī)的系統(tǒng)還能有哪些新的突破和暢想空間。 ';
var reg3 = /小米|MIUI/g; // 替換字符串中的 ‘小米’和‘MIUI’
console.log(prag.replace(reg3, '**'));
var newPrag = prag.replace(reg3, function(s) { // 傳一個(gè)函數(shù),函數(shù)的參數(shù)s代表匹配的 關(guān)鍵字
var temp = '';
for (var i = 0; i < s.length; i++) {
temp += '*';
}
return temp;
});
運(yùn)行結(jié)果:

一些常用符號(hào)
[], (), {}, ^, $
[]是定義匹配的字符范圍。[0-9]表示查找任何從 0 至 9 的數(shù)字。{}一般用來表示匹配的長度。/a{n}/表示匹配連續(xù)n個(gè)a。/a{n, m}/表示匹配連續(xù)m-n個(gè)a()的作用是提取匹配的字符串。表達(dá)式中有幾個(gè)()就會(huì)得到幾個(gè)相應(yīng)的匹配字符串。比如(\s+)表示連續(xù)空格的字符串^匹配一個(gè)字符串的開頭,比如 (^a) 就是匹配以字母a開頭的字符串$匹配一個(gè)字符串的結(jié)尾,比如 (b$) 就是匹配以字母b結(jié)尾的字符串^還有另個(gè)一個(gè)作用就是取反,比如[^xyz]表示匹配的字符串不包含xyz
需要注意的是:如果^出現(xiàn)在[]中一般表示取反,而出現(xiàn)在其他地方則是匹配字符串的開頭。
\d匹配一個(gè)非負(fù)整數(shù), 等價(jià)于 [0-9];\s匹配一個(gè)空白字符;\S和它相反\w匹配一個(gè)英文字母或數(shù)字,等價(jià)于[0-9a-zA-Z];\W和它相反.匹配除換行符以外的任意字符,等價(jià)于[^\n]*表示匹配前面元素0次或多次,比如(\s*)就是匹配0個(gè)或多個(gè)空格;+表示匹配前面元素1次或多次,比如(\d+)就是匹配由至少1個(gè)整數(shù)組成的字符串;?表示匹配前面元素0次或1次,相當(dāng)于{0,1},比如(\w?) 就是匹配最多由1個(gè)字母或數(shù)字組成的字符串 。
使用情況
1.驗(yàn)證
用于驗(yàn)證時(shí),通常需要在前后分別加上^和$,以匹配整個(gè)待驗(yàn)證字符串;
2.搜索替換
搜索/替換時(shí)是否加上此限定則根據(jù)搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$
字符類匹配
[…] 查找方括號(hào)之間的任何字符
[^…] 查找任何不在方括號(hào)之間的字符
[a-z] 查找任何從小寫 a 到小寫 z 的字符
[A-Z] 查找任何從大寫 A 到大寫 Z 的字符
[A-z] 查找任何從大寫 A 到小寫 z 的字符
. 查找單個(gè)字符,除了換行和行結(jié)束符
\w 查找單詞字符,等價(jià)于[a-zA-Z0-9]
\W 查找非單詞字符,等價(jià)于[^a-zA-Z0-9]
\s 查找空白字符
\S 查找非空白字符
\d 查找數(shù)字,等價(jià)于[0-9]
\D 查找非數(shù)字字符,等價(jià)于[^0-9]
\b 匹配單詞邊界
\r 查找回車符
\t 查找制表符
\0 查找 NULL 字符
\n 查找換行符
重復(fù)字符匹配
{n,m} 匹配前一項(xiàng)至少n次,但不能超過m次
{n,} 匹配前一項(xiàng)n次或更多次
{n} 匹配前一項(xiàng)n次
n? 匹配前一項(xiàng)0次或者1次,也就是說前一項(xiàng)是可選的,等價(jià)于{0,1}
n+ 匹配前一項(xiàng)1次或多次,等價(jià)于{1,}
n* 匹配前一項(xiàng)0次或多次,等價(jià)于{0,}
n$ 匹配任何結(jié)尾為 n 的字符串
^n 匹配任何開頭為 n 的字符串
?=n 匹配任何其后緊接指定字符串 n 的字符串
?!n 匹配任何其后沒有緊接指定字符串 n 的字符串
匹配特定數(shù)字
^[1-9]\d$ 匹配正整數(shù)
^-[1-9]\d$ 匹配負(fù)整數(shù)
^-?[0-9]\d$ 匹配整數(shù)
^[1-9]\d|0$ 匹配非負(fù)整數(shù)(正整數(shù) + 0)
^-[1-9]\d|0$ 匹配非正整數(shù)(負(fù)整數(shù) + 0)
^[1-9]\d.\d|0.\d[1-9]\d$ 匹配正浮點(diǎn)數(shù)
^-([1-9]\d.\d|0.\d[1-9]\d)$ 匹配負(fù)浮點(diǎn)數(shù)
^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$ 匹配浮點(diǎn)數(shù)
^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$ 匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
^(-([1-9]\d.\d|0.\d[1-9]\d*))|0?.0+|0$ 匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
匹配特定字符串
^[A-Za-z]+$ 匹配由26個(gè)英文字母組成的字符串
^[A-Z]+$ 匹配由26個(gè)英文字母的大寫組成的字符串
^[a-z]+$ 匹配由26個(gè)英文字母的小寫組成的字符串
^[A-Za-z0-9]+$ 匹配由數(shù)字和26個(gè)英文字母組成的字符串
^\w+$ 匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
參考內(nèi)容: