正則表達式RegExp
正則表達式用於定義一些字符串的規則,計算機可以根據正則表達式,
來檢查一個字符串是否符合規則,或者將字符串中符合規則的內容提取出來
創建正則表達式的對象
語法:
var 變量 = new RegExp("正則表達式","匹配模式");
使用typeof檢查正則對象,會返回object
var reg = new RegExp("a");
這個正則表達式可以來檢查一個字符串中是否含有a;
在構造函數中可以傳遞一個匹配模式作爲第二個參數,可以是:
i 忽略大小寫
g 全局匹配模式
var reg = new RegExp("ab","i");
正則表達式的方法:
test()
使用這個方法可以用來檢查一個字符串是否符合正則表達式的規則,
如果符合則返回true,否則返回false。
var result = reg.test(str);
使用字面量來創建正則表達式
語法:
var 變量 = /正則表達式/匹配模式
使用字面量的方式創建更加簡單,
使用構造函數創建更加靈活
var reg = new RegExp("a","i");
var reg = /a/i;
console.log(typeof reg); // object
console.log(reg.test("abc")); // true
// 創建一個正則表達式,檢查一個字符串中是否有a或b
使用 | 表示或者的意思
var reg = /a|b|c/;
// 創建一個正則表達式檢查一個字符串中是否有字母
[]裏的內容也是或的關係
[ab] == a|b
[a-z] 任意小寫字母
[A-Z] 任意大寫字母
[A-z] 任意字母
[0-9] 任意數字
var reg = /[a-Z]/
// 檢查一個字符串中是否含有 abc 或 adc 或 aec
reg = /a[bde]c/;
[^ ] 表示除了
reg = /[^ab]/;
reg = /[^0-9]/;
// 創建一個正則表達式檢查一個字符串中是否含有aaa
var reg = /a{3}/;
量詞
通過量詞可以設置一個內容出現的次數
量詞只對它前邊的一個內容起作用
{n} 正好出現n次
{m,n} 出現m-n次
{m,} m次以上
+ 至少一個,相當於{1,}
* 0個或多個,相當於{0,}
? 0個或1個,相當於{0,1}
var reg = /(ab){3}/;
reg = /ab{1,3}c/;
reg = /ab+c/;
reg = /ab*c/;
reg = /ab?c/;
// 檢查一個字符串中是否以a開頭
^ 表示開頭
$ 表示結尾
reg = /^a/; // 匹配開頭的a
reg = /a$/; // 匹配結尾的a
如果在正則表達式中同時使用^ $
則要求字符串必須完全符合正則表達式
reg = /^a$/;//只有一個a符合
// 創建一個正則表達式,用來檢查一個字符串是否是一個合法手機號
手機號的規則:1 3 567890123 (11位)
1. 以1開頭
2. 第二位3-9任意數字
3. 三位以後任意數字9個
^1 [3-9] [0-9]{9}$
var phoneStr = "13067890123";
var phoneReg = /^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));//true
檢查一個字符串中是否含有 .
. 表示任意字符
在正則表達式中使用\作爲轉義字符
\. 來表示.
\\ 表示\
注意:
使用構造函數時,由於它的參數是一個字符串,
而\是字符串中轉義字符,
如果要使用\則需要使用\\來代替
var reg = /\./;
reg = /\\/;
reg = new RegExp("\\.");
reg = new RegExp("\\\\");
\w 任意字母、數字、_ [A-z0-9_]
\W 除了字母、數字、_ [^A-z0-9_]
\d 任意的數字 [0-9]
\D 除了數字 [^0-9]
\s 空格
\S 除了空格
\b 單詞邊界
\B 除了單詞邊界
// 創建一個正則表達式檢查一個字符串中是否含有單詞child
reg = /\bchild\b/;
//去除字符串前後空格:
var str = " he llo ";
去除空格就是使用""來替換空格
str = str.replace(/^\s*|\s*$/g,"");
console.log('result = --'+result+'--')
//"result = --he llo—"
字符串和正則相關的方法
split()
可以將一個字符串拆分爲一個數組;
方法中可以傳遞一個正則表達式作爲參數,
這樣方法將會根據正則表達式去拆分字符串。
// 根據任意字母來將字符串拆分
var str = "1a2b3c4d5e6f7";
var result = str.split(/[A-z]/);
console.log(result);//"1,2,3,4,5,6,7"
search()
可以搜索字符串中是否含有指定內容,
如果搜索到指定內容,則會返回第一次出現的索引,
如果沒有搜索到返回-1。
它可以接受一個正則表達式作爲參數,
然後會根據正則表達式去檢索字符串。
serach()只會查找第一個,即使設置全局匹配也沒用
str = "hello abc hello aec afc";
// 搜索字符串中是否含有abc 或 aec 或 afc
result = str.search(/a[bef]c/);
console.log(result);//6
match()
可以根據正則表達式,從一個字符串中將符合條件的內容提取出來。
默認情況下我們的match只會找到第一個符合要求的內容,找到以後就停止檢索;
我們可以設置正則表達式爲全局匹配模式,這樣就會匹配到所有的內容;
可以爲一個正則表達式設置多個匹配模式,且順序無所謂。
match()會將匹配到的內容封裝到一個數組中返回,即使只查詢到一個結果。
str = "1a2a3a4a5e6f7A8B9C";
result = str.match(/[a-z]/ig);
console.log(result); // Array(9) ["a", "a", ...]
console.log(result[2]);//a
replace()
可以將字符串中指定內容替換爲新的內容;
默認只會替換第一個(設置全局匹配模式)
參數:
1.被替換的內容,可以接受一個正則表達式作爲參數
2.新的內容
默認只會替換第一個。
str = "1a2a3a4a5e6f7A8B9C";
result = str.replace(/[a-z]/gi , "@_@");
////1@_@2@_@3@_@4@_@5@_@6@_@7@_@8@_@9@_@
console.log(result);
郵件的正則
電子郵件: hello .nihao @ abc .com.cn
/任意字母數字下劃線 .任意字母數字下劃線 @ 任意字母數字 .任意字母(2-5位) .任意字母(2-5位)/
\w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "[email protected]";
console.log(emailReg.test(email)); // true