正則表達式

一三热、什么是正則表達式

Regular Expression使用單個字符串來描述凤优、匹配一系列符合某個語句規(guī)則的字符串缝其。簡單的說就是按照某種規(guī)則去匹配符合條件的字符串,目的可以是替換或者查找等等。這里推薦一個網(wǎng)站:http://regexper.com采缚。

1似将、生成正則表達式

在javascript中我們通過內(nèi)置對象RegExp來生成一個正則表達式获黔,有兩種方式支持:
1、自變量在验。

var reg= /\bdog\b/g;
var test ='he is a dog,he is a dog ,where is she?';
test.replace(reg, 'boy')//he is a boy,he is a boy ,where is she?’

2、實例化構(gòu)造函數(shù)

var reg = new RegExp('\\bdoy\\b','g')
var test ='he is a dog,he is a dog ,where is she?';
test.replace(reg, 'boy')//he is a boy,he is a boy ,where is she?’
2堵未、正則表達式中的修飾符
g:global,表示全文搜索腋舌,不添加,搜索到第一個匹配停止渗蟹,
i:ignore case 忽視大小寫块饺,默認大小寫敏感,
m: multiple lines 多行搜索雌芽,

3授艰、正則表達式中的元字符

正則表達式有兩種基本的元字符組成:1 原義本字符(符合原本的字符,例如'a'就是去匹配'a')世落;2元字符(在正在表達式中有特殊含義的非字母字符, 例如'\b'表示單詞邊界)

4淮腾、正則表達式中的字符類

1、一般情況下正則表達式一個字符對應(yīng)字符串一個字符屉佳,但有時候我們也需要匹配一類字符谷朝,這個時候我們用元字符[]去構(gòu)建一個簡單的類。這個類是泛指的武花,可以是其中一個圆凰。

var test = 'a1b2c3d4';
var reg = /[abc]/g
test.replace(reg,'Q')//"Q1Q2Q3d4"

2、字符類取反
使用元字符^創(chuàng)建一個反向類体箕,反向類意思是不屬于某個類:

var test = 'a1b2c3d4';
var reg =/[^abc]/g
test.replace(reg,'Q')//"aQbQcQQQ"

3专钉、范圍類
正則表達式提供了一個范圍類挑童,例如我們可以使用[a-z]表示我們可以使用a到z的任意字符,這是一個閉區(qū)間包含了a和z本身跃须。

var test = 'a1b2c3d4';
var reg =/[a-z]/g
test.replace(reg,'Q')//"Q1Q2Q3Q4"

當然[]接受連寫站叼,[a-zA-Z]表示大小a到z或者A-Z。

var test = 'a1b2c3d4WTU';
var reg =/[a-zA-Z]/g
test.replace(reg,'Q')//"Q1Q2Q3Q4QQQ"

萬一我們想匹配'-',怎么辦呢回怜?

var test = '2016-11-11';
var reg =/[0-9]/g
test.replace(reg,'Q')//"QQQQ-QQ-QQ"
var newreg =/[0-9-]/g//只需在后面在加-
test.replace(newreg ,'Q')//QQQQQQQQQQ

4大年、預(yù)定義類

.等價于[^\r\n] //出來回車和換行之外的所有字符
\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]//非單詞字符(字母玉雾,數(shù)字及下劃線)

例如要匹配一個ab加數(shù)字加任意字符:

var reg =/ab[0-9][^\r\n]/g
var somereg =/ab\d./g;//這兩者是一樣的但是一個更加簡短

5翔试、正則表達式邊界

^表示以xxx開始;
$表示以xxx結(jié)束;
\b表示單詞邊界;
\B表示非單詞邊界;
5、正則表達式中的量詞

如果你在正則表達式中需要匹配100次數(shù)字复旬,那應(yīng)該怎么操作呢垦缅?

?表示出現(xiàn)零次或者一次(最多出現(xiàn)一次)
+表示出現(xiàn)一次或者多次(最少出現(xiàn)一次)
*表示出現(xiàn)零次或者多次(任意次)
{n}表示出現(xiàn)n次
{n,m}出現(xiàn)n到m次
{n,}至少出現(xiàn)n次
6、正則表達式中的模式

正則表達式有貪婪模式和非貪婪模式:

貪婪模式就是經(jīng)可能多的匹配:
var reg =/\d{3,6}/g;
var test='1234567';
test.replace(reg,'Y')//"Y7",匹配6次驹碍。
非貪婪模式就是經(jīng)可能少的匹配:
var reg =/\d{3,6}?/g;
var test='1234567';
test.replace(reg,'Y')//"YY7",匹配3次壁涎。
7、正則表達式分組

在javascript中使用()可以打到分組的目的志秃。

var reg = /([a-z]\d){3}/g;//匹配一個字母和任意數(shù)字
var test = 'q1w2e3r4t5';
test.replace(reg,'Y')//"Yr4t5"

正則表達式中的或:

var reg = /by(ess|hey)ee/g;//匹配byessee或者byheyee
var test = 'byesseebyheyeea';
test.replace(reg,'Y')//"YYa"

方向引用:

var reg = /(\d{4})-(\d{2})-(\d{2})/g;
var test = '2016-12-12';//=>12-12-2016
test.replace(reg,'$2-$3-$1')//"12-12-2016"

有時候我們需要忽略分組:

var reg = /(?:\d{4})-(\d{2})-(\d{2})/g;//只需在分組前面加上?:
var test = '2016-12-13';//=>12-12-2016
test.replace(reg,'$2-$4-$1')//"13-$4-12"
7怔球、正則表達式的前瞻

正則表達式從文本從不開始解析再到尾部,順方向稱為'前'浮还,所謂前瞻就是正則表達式在匹配到規(guī)則的時候在前前部去檢查斷言部分竟坛。
javascript中的正則支持正向前瞻(exp(?=assert))和負向前瞻(exp(?!assert))

var test ='a1b2c3vv';
var reg=/\w(?=\d)/g;
test.replace(reg,'Y')//"Y1Y2Y3vv"

這里我們只匹配了'a1b2c3'這部分中的‘a(chǎn)bc’,因為我們還檢查了斷言部分(?=/d),但是不參與替換。

var test ='a1b2c3vv';
var reg=/\w(?!\d)/g;//任意字符斷言部分不是數(shù)字的字符
test.replace(reg,'Y')//"aYbYcYYY"

二钧舌、javascript正則表達式對象屬性

屬性

lastIndex:是當前表達式匹配內(nèi)容的最后一個字符的下一個位置(下一次匹配從哪里開始)担汤,
source:正則表達式文本字符串(/..../里面的內(nèi)容)

方法
test():用于測試字符串參數(shù)中是否存在匹配正則表達式規(guī)則的字符串,存在返回true,反之false洼冻。建議用test的時候不要加g崭歧、i等等,因為反復(fù)test之后lastindex這個貨影響test結(jié)果

var something ='ab';
var reg=/\w/g;
reg.test(something)//true
reg.test(something)//true
reg.test(something)//false
while(reg.test(something)){
    console.log(reg.lastIndex)
}//1.2第一次匹配到a,下次開始位置就是b(1)

exec():使用正則表達式規(guī)則對字符串進行搜索撞牢,并將更新全局RegExp對象的屬(lastIndex屬性)性以反映匹配結(jié)果率碾,如果沒有匹配返回null,反之能返回一個數(shù)組普泡,這個數(shù)組也有兩個屬性index(聲明匹配文本的第一個字符位置)和input(存放被檢索字符串的string)

var something ='ab2s2ad3e2re5e2e';
var reg1=/\d(\w)\d/;
var reg2=/\d(\w)\d/g;
var ret= reg1.exec(something)
console.log(reg1.lastIndex+'\t'+ret.index+'\t'+ret.toString());//0  2   2s2,s
while(ret =reg2.exec(something)){

console.log(reg2.lastIndex+'\t'+ret.index+'\t'+ret.toString());
}//5    2   2s2,s ;10   7   3e2,e;15    12  5e2,e

reg1.lastIndex打印出0那是因為沒有全局調(diào)用g播掷。reg2.lastIndex表示第一次匹配的是'2s2',那下一次的位置就是后面的’a‘自然是第5個位置撼班,ret.index都打印出2表示符合規(guī)則的’2s2‘第一次出現(xiàn)的位置是2歧匈,全局調(diào)用則會繼續(xù)查找10和15,ret.index也是如此。
ES6關(guān)于正則也有一些添加砰嘁,之后在補充件炉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勘究,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斟冕,更是在濱河造成了極大的恐慌口糕,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磕蛇,死亡現(xiàn)場離奇詭異景描,居然都是意外死亡,警方通過查閱死者的電腦和手機秀撇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門超棺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呵燕,你說我怎么就攤上這事棠绘。” “怎么了再扭?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵氧苍,是天一觀的道長。 經(jīng)常有香客問我泛范,道長让虐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任罢荡,我火速辦了婚禮澄干,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柠傍。我一直安慰自己,他們只是感情好辩稽,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布惧笛。 她就那樣靜靜地躺著,像睡著了一般逞泄。 火紅的嫁衣襯著肌膚如雪患整。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天喷众,我揣著相機與錄音各谚,去河邊找鬼。 笑死到千,一個胖子當著我的面吹牛昌渤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憔四,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼膀息,長吁一口氣:“原來是場噩夢啊……” “哼般眉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潜支,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甸赃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冗酿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埠对,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年裁替,在試婚紗的時候發(fā)現(xiàn)自己被綠了项玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡胯究,死狀恐怖稍计,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裕循,我是刑警寧澤臣嚣,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站剥哑,受9級特大地震影響硅则,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜株婴,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一怎虫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧困介,春花似錦大审、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至根穷,卻和暖如春姜骡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屿良。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工圈澈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尘惧。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓康栈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谅将,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容