JavaScript 正則表示式RegExp(text方法/內部類/邊界/量詞/優先順序/replace/trim)
阿新 • • 發佈:2019-02-01
1. 概述
英語:Regular Expression
本質:用來記錄文字規則的程式碼
(為字串定義規則,為輸入內容定義規則!)
應用非常廣泛,如:表單驗證、高階搜尋、生化科學
(有一定難度,不要求非常熟練,但至少會表單驗證)
2. 正則表示式的組成
由一些普通字元和元字元組成,普通字元就是字母和數字,元字元具有特殊意義的字元
匹配騰訊QQ號:[1-9][0-9]{4,}
評註:騰訊QQ號從10000開始
3. 正則表示式宣告
① 通過建構函式定義
4. test() 方法 正則物件方法,檢測測試字串是否符合該規則,返回true和false,引數(測試字串)
5. 正則內部類 (幫我們寫好的工具直接使用) ① 預定義類 . [^\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] 非單詞字元 特殊字元: \t /\t/ 製表符 \n /\n/ 換行符 \r /\r/ 回車符 \f /\f/ 換頁符 \b /\b/ 與回退字元 \v /\v/ 垂直製表符 \0 /\0/ 空字元 回車和換行是兩個東西,就像古老的打字機一樣。 ② 簡單類
1)什麼都不加直接寫:只要完整包含就可以了
/string/.test(“string”); 必須是完整的,只多不能少
2)在[ ]裡寫:只要包含裡面的任何一個就可以 /[string]/.test(“string”); 只要包含裡面的任何一個就可以
6. 正則邊界 ^ 會匹配行或者字串的起始位置 注意:^在[ ]中才表示非,這裡表示開始 $ 會匹配行或字串的結尾位置 ^$在一起 表示必須是這個(精確匹配) // 邊界可以精確說明要什麼
var 變數名= new RegExp(/表示式/);
② 通過直接量定義 (較為常用)
var 變數名= /表示式/; console.log(regexp1.test(345)); console.log(/\d/.test(567));//直接使用
4. test() 方法 正則物件方法,檢測測試字串是否符合該規則,返回true和false,引數(測試字串)
Boolean = 表示式.test("要驗證的內容");
console.log(/\d/.test(567));//驗證567符不符合 \d 的規範
5. 正則內部類 (幫我們寫好的工具直接使用) ① 預定義類 . [^\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] 非單詞字元 特殊字元: \t /\t/ 製表符 \n /\n/ 換行符 \r /\r/ 回車符 \f /\f/ 換頁符 \b /\b/ 與回退字元 \v /\v/ 垂直製表符 \0 /\0/ 空字元 回車和換行是兩個東西,就像古老的打字機一樣。 ② 簡單類
/andy/.test(“andy”); // true
/andy/.test(“andylv”); // true
/andy/.test(“an”); // false
2)在[ ]裡寫:只要包含裡面的任何一個就可以 /[string]/.test(“string”); 只要包含裡面的任何一個就可以
③ 負向類(不能是其中的整體或者一部分) 中括號內,前面加個元字元^進行取反,不是括號裡面的字元(一部分也不行)。 (可以不夠,但是不能多)(不夠和正好,返回false;多了或者沒有返回true)/[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
console.log(/[^abc]/.test('a')); //false
console.log(/[^abc]/.test('gg'));//true
console.log(/[^abc]/.test('abcgg'));//true
注意: 這個符號 ^ 一定是寫到方括號裡面
④ 範圍類
有時匹配的東西過多,而且型別又相同,全部輸入太麻煩,我們可以在中間加了個橫線console.log(/[a-z]/.test('1111'));
console.log(/[A-Z]/.test('aa'));
⑤ 組合類
用中括號匹配不同型別的單個字元。console.log(/[a-m1-5]/.test("b")); //true
6. 正則邊界 ^ 會匹配行或者字串的起始位置 注意:^在[ ]中才表示非,這裡表示開始 $ 會匹配行或字串的結尾位置 ^$在一起 表示必須是這個(精確匹配) // 邊界可以精確說明要什麼
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 這四個字母
7. 量詞
(多個字母,重複最後一個)
* 重複零次或更多 (>=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(沒有&,用的是,代替的)
()提高許可權,有限計算
8. 正則優先順序
① ()
② ^$
③ |
④ 量詞
9. replace 函式
replace() 方法用於在字串中用一些字元替換另一些字元,或替換一個與正則表示式匹配的字串。
注意:返回的是新的字串,原來的還是沒變str2 = str1.replace(/要替換/ig,“替換成”);
i : 忽略大小寫
g: 全域性替換
10. trim 函式
不相容ie678,需要自己封裝
function trim(str) {
return str.replace(/(^\s+)|(\s+$)/g,""); // 去掉前面和後面的空格
}