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ī)則,該對象會返回 true
或 false
宛琅,其參數(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(/激情/, "**");