JS 學習筆記 | 正則表達式

1.正則表達式概述

1.1 什么是正則表達式

正則表達式(Regular Expression)是用于匹配字符串中字符組合的模式,在 JS 中灿椅,正則表達式也是對象乔询。
正則表達式通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本凳寺,例如驗證表單:用戶名表達只能輸入英文字母柴信、數(shù)字和下劃線套啤,昵稱輸入框可以輸入中文(匹配)。此外随常,正則表達式還常用于過濾掉頁面中的一些敏感詞(替換)潜沦,或從字符串中獲取我們想要的特定部分(提取)等。
其它語言也會使用正則表達式线罕,本階段我們主要利用 JS 正則表達式來完成表單校驗止潮。

1.2 正則表達式的特點

  • 靈活性、邏輯性和功能性非常的強
  • 可以迅速的以簡單的方式達到字符串的復雜控制
  • 對于剛接觸的人來說钞楼,比較晦澀難懂,比如:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 實際開發(fā)一般都直接復制寫好了的正則表達式

2.正則表達式在 JS 中的使用

2.1 正則表達式的創(chuàng)建

在 JS 中袄琳,可以通過兩種方式創(chuàng)建正則表達式询件。

2.1.1 通過調(diào)用 RegExp 對象的構(gòu)造函數(shù)創(chuàng)建

var regexp = new Regexp(/123/);
console.log(regexp);

2.1.2 通過字面量創(chuàng)建正則表達式

var rg = /123/;

2.2 測試正則表達式

test() 正則對象方法燃乍,用于檢測字符串是否符合該規(guī)則,該對象會返回 truefalse宛琅,其參數(shù)是測試字符串刻蟹。

var rg = /123/;
console.log(rg.test(123));  // 判斷正則表達式中是否出現(xiàn)了 123
console.log(rg.test("abc"));    // 判斷正則表達式中是否出現(xiàn)了 abc

3.正則表達式中的特殊字符

3.1 正則表達式的組成

一個正則表達式可以由簡單的字符構(gòu)成,比如 /abc/嘿辟,也可以是簡單或特殊字符的組合舆瘪,比如 /ab*c/。其中特殊字符也被稱為元字符红伦,在正則表達式中是具有特殊意義的專用符號英古,如:^、$昙读、+ 等召调。

注意:正則表達式里面不需要加引號,不管是字符還是數(shù)字蛮浑。

特殊字符非常多:可以參考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

3.2 邊界符

正則表達式中的邊界符(位置符)用來提示字符所處的位置唠叛,主要有兩個字符:

在這里插入圖片描述

如果 ^ 和 $ 在一起,表示必須是精確匹配沮稚。

// 邊界符 ^ $
var rg = /abc/;
// 只要包含有 abc 這個字符串艺沼,返回的都是 true
console.log(rg.test("abc"));    // true
console.log(rg.test("abcd"));   // true
console.log(rg.test("aabcd"));  // true
console.log('----------------------');
var reg = /^abc/;
console.log(reg.test("abc"));   // ture
console.log(reg.test("abcd"));  // true
console.log(reg.test("aabcd")); // false
console.log('----------------------');
var reg2 = /^abc$/; // 要求必須是 abc 才符合規(guī)范
console.log(reg2.test("abc"));  // true
console.log(reg2.test("abcd")); // false
console.log(reg2.test("aabcd"));    // false
console.log(reg2.test("abcabc"));   // false

3.3 字符類

字符類表示有一系列字符可供選擇,只要匹配其中一個就可以了蕴掏。所有可供選擇的字符都放在方括號中澳厢。

3.3.1 [] 方括號

表示一系列字符可供選擇,只要匹配其中一個就可以了囚似。

var rg = /[abc]/;   // 只要包含有 a 或者包含有 b 或者包含有 c 都返回 true剩拢。
console.log(rg.test("andy"));   // true
console.log(rg.test("baby"));   // true
console.log(rg.test("red"));    // false
console.log("-----------------");
var rg2 = /^[abc]$/;    // 三選一,只有是 a 或者是 b 或者是 c饶唤,這三個字母才返回 true
console.log(rg2.test("abc"));   // false
console.log(rg2.test("a")); // true
console.log(rg2.test("b")); // true
console.log(rg2.test("c")); // true
console.log("-------------------");
var reg3 = /^[a-z]$/;   // 26 個英文字母任何一個字母返回的都是 true徐伐, - 表示范圍
console.log(reg3.test("a"));    // true
console.log(reg3.test("z"));    // true
console.log(reg3.test("1"));    // false
console.log(reg3.test("A"));    // false
console.log("-------------------");
var reg4 = /^[a-zA-z0-9]$/;    // 26 個英文字母(大寫或小寫都可以)任何一個字母返回的都是 true - 表示范圍
var reg5 = /^[^a-zA-z0-9]$/;    // 如果中括號中有 ^,表示取反

3.3.2 量詞符

量詞符用來設定某個模式出現(xiàn)的次數(shù)募狂。


在這里插入圖片描述
// 量詞符:用來設定某個模式出現(xiàn)的次數(shù)
// 簡單理解:就是讓下面的 a 這個字符重復出現(xiàn)的次數(shù)
// var reg = /^a$/;

// * 相當于 >= 0 可以出現(xiàn) 0 次或很多次
var reg = /^a*$/;
console.log(reg.test(""));  // true
console.log(reg.test("a"));  // true
console.log(reg.test("aaaa"));  // true

// + 相當于 >= 1 可以出現(xiàn) 1 次或很多次
var reg = /^a+$/;
console.log(reg.test(""));  // false
console.log(reg.test("a"));  // true
console.log(reg.test("aaaa"));  // true

// ? 相當于 1 || 0
var reg = /^a?$/;
console.log(reg.test(""));  // true
console.log(reg.test("a"));  // true
console.log(reg.test("aaaa"));  // false

// {3} 相當于重復 3 次
var reg = /^a{3}$/;
console.log(reg.test(""));  // false
console.log(reg.test("a"));  // false
console.log(reg.test("aaa"));  // true

// {3,} 相當于 >= 3 次
var reg = /^a{3,}$/;
console.log(reg.test(""));  // false
console.log(reg.test("a"));  // false
console.log(reg.test("aaa"));  // true
console.log(reg.test("aaaaa"));  // true

// {3, 16} 相當于 >= 3 && <= 16
var reg = /^a{3,16}$/;
console.log(reg.test(""));  // false
console.log(reg.test("a"));  // false
console.log(reg.test("aaa"));  // true
console.log(reg.test("aaaa"));  // true

3.3.3 括號總結(jié)

  • 大括號:量詞符办素,表示可以重復的次數(shù)
  • 中括號:字符集合,匹配中括號中任意字符
  • 小括號:優(yōu)先級

3.4 預定義類

預定義類指的是常見模式的簡寫方式:


在這里插入圖片描述

3.5 正則表達式的替換

replace() 方法可以實現(xiàn)替換字符串操作祸穷,用來替換的參數(shù)可以是一個字符串或是一個正則表達式性穿。

語法:

stringObj.replace(regexp/substr, replacement);

參數(shù)1:正則表達式或被替換的字符串
參數(shù)2:被替換上的字符串

例如:

var newStr = str.replace(/激情/, "**");
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷滚,隨后出現(xiàn)的幾起案子需曾,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呆万,死亡現(xiàn)場離奇詭異商源,居然都是意外死亡,警方通過查閱死者的電腦和手機谋减,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門牡彻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人出爹,你說我怎么就攤上這事庄吼。” “怎么了严就?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵总寻,是天一觀的道長。 經(jīng)常有香客問我盈蛮,道長废菱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任抖誉,我火速辦了婚禮殊轴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袒炉。我一直安慰自己旁理,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布我磁。 她就那樣靜靜地躺著孽文,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夺艰。 梳的紋絲不亂的頭發(fā)上芋哭,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音郁副,去河邊找鬼减牺。 笑死,一個胖子當著我的面吹牛存谎,可吹牛的內(nèi)容都是我干的拔疚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼既荚,長吁一口氣:“原來是場噩夢啊……” “哼稚失!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恰聘,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤句各,失蹤者是張志新(化名)和其女友劉穎吸占,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诫钓,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡旬昭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年篙螟,在試婚紗的時候發(fā)現(xiàn)自己被綠了菌湃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡遍略,死狀恐怖惧所,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绪杏,我是刑警寧澤下愈,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蕾久,受9級特大地震影響势似,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僧著,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一履因、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盹愚,春花似錦栅迄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愈腾,卻和暖如春憋活,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虱黄。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工悦即, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人礁鲁。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓盐欺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仅醇。 傳聞我的和親對象是個殘疾皇子冗美,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355