概述
正則表達式(英語:Regular Expression)
本質:用來記錄文本規則的代碼
(為字符串定義規則,為輸入內容定義規則?。?br>
應用非常廣泛,如:表單驗證、高級搜索、生化科學
正則表達式的特點:
1、靈活性、邏輯性和功能性非常的強
2、可以迅速的用極簡單的方式達到字符串的復雜控制
3、對于剛接觸的人來說,比較晦澀難懂
比如:
匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
驗證手機號:
/^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$/
正則表達式聲明
通過構造函數定義
var 變量名= new RegExp(/表達式/);
通過直接量定義
var 變量名= /表達式/;
console.log(regexp1.test(345));
console.log(/\d/.test(567));(直接使用)
正則表達式的組成是
有一些普通字符和元字符組成,普通字符就是字母和數字,元字符具有特殊意義的字符
匹配騰訊QQ號:[1-9][0-9]{4,}
評注:騰訊QQ號從10000開始
比如 \d
預定義類: 表示數字 [0-9]
test()方法
正則對象方法,檢測測試字符串是否符合該規則,返回true和false,參數
使用語法:
Boolean=表達式.test("驗證的內容");
console.log(/\d/.test(567));
驗證 567符不符合/d的規則
正則內部類
預定義類
. [^\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] 非單詞字符
簡單類(正則://中什么特殊符號都不寫,和[]的加入)
1、/string/.test("string"); //必須是完整的,只多不能少
/andy/.test("andy") //true
/andy/.test(andylv") //true
/andy/.test("an") //false
一句話,只要完整包含了andy 就可以了(有他就行)
2、/[string]/.test(“string”); 只要包含里面的任何一個就可以
/[andy]/.test("andy"); // true
/[andy]/.test("an"); // true
/[andy]/.test("ady"); // true
/[andy]/.test("anll"); // true
/[andy]/.test("assd"); // true
/[andy]/.test("ss"); // false
/[3aH8]/.test("ss"); // false
負向類
中括號內,前面加個元字符^進行取反,不是括號里面的字符(一部分也不行)。
(可以不夠,但是不能多)(不夠和正好,返回false;多了或者沒有返回true)
console.log(/[^abc]/.test('a'));
console.log(/[^abc]/.test('gg'));
注意: 這個符號 ^ 一定是寫到方括號里面
范圍類
有時匹配的東西過多,而且類型又相同,全部輸入太麻煩,我們可以在中間加了個橫線
console.log(/[a-z]/.test('1111'));
console.log(/[A-Z]/.test('aa'));
組合類
用中括號匹配不同類型的單個字符。
console.log(/[a-m1-5]/.test("b"))//true
正則邊界
^ 會匹配行或者字符串的起始位置
注:^在[]中才表示非!這里表示開始
$ 會匹配行或字符串的結尾位置
^$在一起 表示必須是這個(精確匹配)
// 邊界可以精確說明要什么
console.log(/lily/.test("lilyname")); // true
console.log(/^lily$/.test("lily")); // true
console.log(/^lily$/.test("ly")); // false
console.log(/^andy$/.test("andy")); // true
這個的最終意思就是 說, 必須是 andy 這四個字母
量詞
- (貪婪) 重復零次或更多 (>=0)
- (懶惰) 重復一次或更多次 (>=1)
? (占有) 重復零次或一次 (0||1) 要么有 要么沒有
{}重復多少次的意思可以有多少個
您的銀行卡密碼只能是 6位 {6}
{n} n次 (x=n)
{n,} 重復n次或更多 (x>=n)
{n,m} 重復出現的次數比n多但比m少 (n<=x<=m)
{0,}
{1,}
? {0,1}
x|y 一個 | x 或者 y(沒有&,用的是,代替的)
()提高權限,有限計算
匹配座機號
var regexp = /^(0\d{2}-\d{8})|(0\d{3}-\d{7})$/;
var demo = /^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/;
匹配中文
( /^[\u4e00-\u9fa5]{2,4}$/ )
replace 函數
replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。
語法格式:(返回值是新字符串)
需要匹配的對象.replace(正則式/字符串,替換的目標字符)
正則表達式的匹配模式支持的2個標志
g:表示全局模式(global),即模式將被應用于所有字符串而非發現一個而停止
i:表示不區分大小寫(ease-insensitive)模式,在確定匹配想時忽略模式與字符串的大小寫
封裝自己的trim函數
function trim(str) {
return str.replace(/(^\s+)|(\s+$)/g,""); // 去掉前面和后面的空格
}