国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

老生常談JavaScript 正則表達式語法

2019-11-20 09:11:35
字體:
來源:轉載
供稿:網友

JavaScript定義正則表達式有兩種方法。

1.RegExp構造函數

var pattern = new RegExp("[bc]at","i");

它接收兩個參數:一個是要匹配的字符串模式,另一個是可選的標志字符串。

2.字面量

var pattern = /[bc]at/i;

正則表達式的匹配模式支持三種標志字符串:

g:global,全局搜索模式,該模式將被應用于所有字符串,而并非搜索到第一個匹配項就停止搜索;

i:ingore case,忽略字母大小寫,即在確定匹配項時忽略模式和字符串大小寫;

m:multiple lines,多行模式,即在搜索到達一行文本末尾時會繼續查找下一行是否有匹配項。

這兩種創建正則表達式方法的不同之處在于,正則表達式字面量始終會共享同一個RegExp實例,而使用構造函數創建的每一個新RegExp實例都是新實例。

元字符

元字符是擁有特殊意義的字符,正則表達式的元字符主要有:

( [ { / ^ $ | ) ? * + .  

在不同的組合中元字符有其不同的意義。

預定義特殊字符

字符類  簡單類

一般情況下正則表達式一個字符對應字符串一個字符,但我們可以使用[]來構建一個簡單的類,來表示符合某一特征的一類字符。例如:

[abc]可以匹配方括號中的a、b、c或其任意組合的字符。

反向類

既然[]可以構建一個類,那么自然就會聯想到與之對應的不包含括號中內容的類,這個類叫做反向類,例如[^abc]就可以匹配不是a或b或c的字符。

范圍類

有時候一個一個字符匹配太麻煩而且匹配的類型也相同,此時我們可以使用"-"連接線來表示某個閉區間之間的內容,例如匹配所有小寫字母可以使用[a-z],如下:

匹配所有的0到9簡直的任意數字可以使用[0-9]表示:

預定義類

對于如上我們創建的幾個類,正則表達式為我們提供了幾個常用的預定義類來匹配常見的字符,如下:

字符   等價類   含義
.   [^/n/r] 匹配除了回車符和換行符之外的所有字符
/d [0-9] 數字字符
/D [^0-9] 非數字字符
/s [/t/n/x0B/f/r] 空白字符
/S   [^/t/n/x0B/f/r] 非空白字符
/w [a-zA-Z_0-9] 單詞字符(字母、數字和下劃線)
/W [^a-zA-Z_0-9] 非單詞字符

量詞

上面的方法匹配字符都是一對一匹配的,如果某個字符連續出現多次按照上面的方法匹配會非常麻煩,因此我們想有沒有其它方法可以直接匹配多次重復出現的字符。正則表達式為我們提供了一些量詞,如下:

字符   含義  
? 出現零次或一次(最多一次)
+ 出現一次或多次(至少一次)
* 出現零次或多次(任意次)
{n} 出現n次
{n,m} 出現n到m次
{n,} 至少出現n次

貪婪模式與非貪婪模式

對于{n,m}這種匹配方式,到底是匹配n個還是匹配m個呢?這就涉及到匹配模式的問題。默認情況下,量詞是盡可能多的匹配字符,也就是所謂的貪婪模式,例如:

var num = '123456789'; num.match(//d{2,4}/g); //[1234]、[5678]、[9] 

與貪婪模式對于的是非貪婪模式,只需要在量詞之后加"?"即可,例如{n,m}?,就是按照最少的字符匹配,如下: 

var num = '123456789'; num.match(//d{2,4}?/g); //[12]、[34]、[56]、[78]、[9] 

分組

量詞只能是單個字符匹配多次,如果我們希望匹配某一組字符多次呢?正則表達式中小括號可以定義一個字符串整體為一個分組。

我們想要匹配apple這個單詞出現4次可以這樣匹配(apple){4},如下:

如果想要匹配apple或orange出現4次,可以插入管道符"|",例如:

(apple|orange){4}

如果使用分組的正則表達式中出現多個小括號即多個分組,那么匹配結果就會把匹配項也分組并編號,例如:

(apple)/d+(orange)

如果我們不希望捕獲某些分組,只需要在分組的小括號前面緊跟一個問號和冒號即可,例如:

(?:apple)/d+(orange)

邊界

正則表達式也為我們提供了幾個常用的邊界匹配字符,例如:

字符 含義
^ 以xx開頭
$ 以xx結尾
/b 單詞邊界,指[a-zA-Z_0-9]之外的字符
/B 非單詞邊界

其中單詞邊界匹配的是一個位置,這個位置的一側是構成單詞的字符,但另一側為非單詞字符、字符串的開始或結束位置。

前瞻

前瞻用來匹配接下來出現的是或不是某一個特定的字符集。

表達式 含義
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1

看一個例子:

apple(?=orange)

(/apple(?=orange)/).test('appleorange123'); //true (/apple(?=orange)/).test('applepear345'); //false 

再看另一個例子:

apple(?!orange)

(/apple(?!orange)/).test('appleorange123'); //false (/apple(?!orange)/).test('applepear345'); //true 

以上這篇老生常談JavaScript 正則表達式語法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广西| 浠水县| 静海县| 怀仁县| 衡东县| 江城| 吉木萨尔县| 维西| 土默特左旗| 长阳| 麦盖提县| 大庆市| 宝丰县| 淮南市| 兴和县| 远安县| 怀化市| 康保县| 吴忠市| 岳阳市| 八宿县| 黎城县| 兴安县| 托里县| 濉溪县| 常德市| 澄迈县| 阳山县| 安陆市| 罗田县| 横峰县| 宁乡县| 韶关市| 利津县| 泽州县| 孝感市| 鄯善县| 固安县| 浙江省| 金堂县| 油尖旺区|