老生常談JavaScript 正則表達(dá)式語(yǔ)法
JavaScript定義正則表達(dá)式有兩種方法。
1.RegExp構(gòu)造函數(shù)
var pattern = new RegExp("[bc]at","i");
它接收兩個(gè)參數(shù):一個(gè)是要匹配的字符串模式,另一個(gè)是可選的標(biāo)志字符串。
2.字面量
var pattern = /[bc]at/i;
正則表達(dá)式的匹配模式支持三種標(biāo)志字符串:
g:global,全局搜索模式,該模式將被應(yīng)用于所有字符串,而并非搜索到第一個(gè)匹配項(xiàng)就停止搜索;
i:ingore case,忽略字母大小寫(xiě),即在確定匹配項(xiàng)時(shí)忽略模式和字符串大小寫(xiě);
m:multiple lines,多行模式,即在搜索到達(dá)一行文本末尾時(shí)會(huì)繼續(xù)查找下一行是否有匹配項(xiàng)。
這兩種創(chuàng)建正則表達(dá)式方法的不同之處在于,正則表達(dá)式字面量始終會(huì)共享同一個(gè)RegExp實(shí)例,而使用構(gòu)造函數(shù)創(chuàng)建的每一個(gè)新RegExp實(shí)例都是新實(shí)例。
元字符
元字符是擁有特殊意義的字符,正則表達(dá)式的元字符主要有:
( [ { \ ^ $ | ) ? * + .
在不同的組合中元字符有其不同的意義。
預(yù)定義特殊字符
字符類 簡(jiǎn)單類
一般情況下正則表達(dá)式一個(gè)字符對(duì)應(yīng)字符串一個(gè)字符,但我們可以使用[]來(lái)構(gòu)建一個(gè)簡(jiǎn)單的類,來(lái)表示符合某一特征的一類字符。例如:
[abc]可以匹配方括號(hào)中的a、b、c或其任意組合的字符。
反向類
既然[]可以構(gòu)建一個(gè)類,那么自然就會(huì)聯(lián)想到與之對(duì)應(yīng)的不包含括號(hào)中內(nèi)容的類,這個(gè)類叫做反向類,例如[^abc]就可以匹配不是a或b或c的字符。
范圍類
有時(shí)候一個(gè)一個(gè)字符匹配太麻煩而且匹配的類型也相同,此時(shí)我們可以使用"-"連接線來(lái)表示某個(gè)閉區(qū)間之間的內(nèi)容,例如匹配所有小寫(xiě)字母可以使用[a-z],如下:
匹配所有的0到9簡(jiǎn)直的任意數(shù)字可以使用[0-9]表示:
預(yù)定義類
對(duì)于如上我們創(chuàng)建的幾個(gè)類,正則表達(dá)式為我們提供了幾個(gè)常用的預(yù)定義類來(lái)匹配常見(jiàn)的字符,如下:
字符 | 等價(jià)類 | 含義 |
. | [^\n\r] | 匹配除了回車(chē)符和換行符之外的所有字符 |
\d | [0-9] | 數(shù)字字符 |
\D | [^0-9] | 非數(shù)字字符 |
\s | [\t\n\x0B\f\r] | 空白字符 |
\S | [^\t\n\x0B\f\r] | 非空白字符 |
\w | [a-zA-Z_0-9] | 單詞字符(字母、數(shù)字和下劃線) |
\W | [^a-zA-Z_0-9] | 非單詞字符 |
量詞
上面的方法匹配字符都是一對(duì)一匹配的,如果某個(gè)字符連續(xù)出現(xiàn)多次按照上面的方法匹配會(huì)非常麻煩,因此我們想有沒(méi)有其它方法可以直接匹配多次重復(fù)出現(xiàn)的字符。正則表達(dá)式為我們提供了一些量詞,如下:
字符 | 含義 |
? | 出現(xiàn)零次或一次(最多一次) |
+ | 出現(xiàn)一次或多次(至少一次) |
* | 出現(xiàn)零次或多次(任意次) |
{n} | 出現(xiàn)n次 |
{n,m} | 出現(xiàn)n到m次 |
{n,} | 至少出現(xiàn)n次 |
貪婪模式與非貪婪模式
對(duì)于{n,m}這種匹配方式,到底是匹配n個(gè)還是匹配m個(gè)呢?這就涉及到匹配模式的問(wèn)題。默認(rèn)情況下,量詞是盡可能多的匹配字符,也就是所謂的貪婪模式,例如:
var num = '123456789'; num.match(/\d{2,4}/g); //[1234]、[5678]、[9]
與貪婪模式對(duì)于的是非貪婪模式,只需要在量詞之后加"?"即可,例如{n,m}?,就是按照最少的字符匹配,如下:
var num = '123456789'; num.match(/\d{2,4}?/g); //[12]、[34]、[56]、[78]、[9]
分組
量詞只能是單個(gè)字符匹配多次,如果我們希望匹配某一組字符多次呢?正則表達(dá)式中小括號(hào)可以定義一個(gè)字符串整體為一個(gè)分組。
我們想要匹配apple這個(gè)單詞出現(xiàn)4次可以這樣匹配(apple){4},如下:
如果想要匹配apple或orange出現(xiàn)4次,可以插入管道符"|",例如:
(apple|orange){4}
如果使用分組的正則表達(dá)式中出現(xiàn)多個(gè)小括號(hào)即多個(gè)分組,那么匹配結(jié)果就會(huì)把匹配項(xiàng)也分組并編號(hào),例如:
(apple)\d+(orange)
如果我們不希望捕獲某些分組,只需要在分組的小括號(hào)前面緊跟一個(gè)問(wèn)號(hào)和冒號(hào)即可,例如:
(?:apple)\d+(orange)
邊界
正則表達(dá)式也為我們提供了幾個(gè)常用的邊界匹配字符,例如:
字符 | 含義 |
^ | 以xx開(kāi)頭 |
$ | 以xx結(jié)尾 |
\b | 單詞邊界,指[a-zA-Z_0-9]之外的字符 |
\B | 非單詞邊界 |
其中單詞邊界匹配的是一個(gè)位置,這個(gè)位置的一側(cè)是構(gòu)成單詞的字符,但另一側(cè)為非單詞字符、字符串的開(kāi)始或結(jié)束位置。
前瞻
前瞻用來(lái)匹配接下來(lái)出現(xiàn)的是或不是某一個(gè)特定的字符集。
表達(dá)式 | 含義 |
exp1(?=exp2) | 匹配后面是exp2的exp1 |
exp1(?!exp2) | 匹配后面不是exp2的exp1 |
看一個(gè)例子:
apple(?=orange)
(/apple(?=orange)/).test('appleorange123'); //true (/apple(?=orange)/).test('applepear345'); //false
再看另一個(gè)例子:
apple(?!orange)
(/apple(?!orange)/).test('appleorange123'); //false (/apple(?!orange)/).test('applepear345'); //true
以上這篇老生常談JavaScript 正則表達(dá)式語(yǔ)法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Javascript中正則表達(dá)式的使用及基本語(yǔ)法
- 正則表達(dá)式基本語(yǔ)法及表單驗(yàn)證操作詳解【基于JS】
- JS正則表達(dá)式一條龍講解(從原理和語(yǔ)法到JS正則)
- 詳解js正則表達(dá)式語(yǔ)法介紹
- JavaScript正則表達(dá)式上之基本語(yǔ)法(推薦)
- javascript正則表達(dá)式定義(語(yǔ)法)總結(jié)
- js正則表達(dá)式基本語(yǔ)法(精粹)
- js 玩轉(zhuǎn)正則表達(dá)式之語(yǔ)法高亮
- 正則表達(dá)式語(yǔ)法規(guī)則及在Javascript和C#中的使用方法
- javascript中正則表達(dá)式語(yǔ)法詳解
相關(guān)文章
javascript排序函數(shù)實(shí)現(xiàn)數(shù)字排序
這篇文章主要介紹了javascript排序函數(shù)實(shí)現(xiàn)數(shù)字排序的相關(guān)資料,附上示例,需要的朋友可以參考下2015-06-06JavaScript實(shí)現(xiàn)省市縣三級(jí)級(jí)聯(lián)特效
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)省市縣三級(jí)級(jí)聯(lián)特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05js 通過(guò)cookie實(shí)現(xiàn)刷新不變化樹(shù)形菜單
通過(guò)設(shè)置cookie來(lái)保存樹(shù)形菜單的狀態(tài),在頁(yè)面加載時(shí)重新讀取cookie來(lái)設(shè)置菜單2014-10-10常見(jiàn)Ajax下載文件方式以及報(bào)錯(cuò)解決辦法
AJAX(Asynchronous JavaScript and XML)是一種用于創(chuàng)建快速、動(dòng)態(tài)和交互式網(wǎng)頁(yè)的技術(shù),它的主要優(yōu)勢(shì)在于能夠在不刷新整個(gè)網(wǎng)頁(yè)的情況下與服務(wù)器進(jìn)行數(shù)據(jù)交互,這篇文章主要給大家介紹了關(guān)于常見(jiàn)Ajax下載文件方式以及報(bào)錯(cuò)解決辦法的相關(guān)資料,需要的朋友可以參考下2024-01-01