正則表達式
規則表達式(英語:Regular Expression,簡寫爲regex、regexp或RE),它是計算機科學的一個概念,正則表通常被用來檢索、替換那些符合某個模式(規則)的文本,常應用於表單上,一種字符串的匹配規則,但它不是字符串,是字符串的匹配模式/規則
正則表達式的創建
1、字面量創建:正則由兩個/包裹
var reg1=/a/; 模式:匹配指定字符串中的"a"字符 注意!/ \ /轉義
2、通過構造函數RegExp創建正則對象,參數有2:1、正則表達式內容,需要一個字符串;2、正則匹配規則的修飾符,需要一個字符串
var reg2=new RegExp("a","str");
通過兩種方式創建的正則是一樣的,方法2可以拼接變量,方法1不可以
正則表達式匹配模式修飾符
i:正則匹配時忽略大小寫
g:正則全局匹配
m:正則進行多行搜索匹配,匹配模式爲換行匹配,會影響^$的結果,忽略換行符\n
常用正則方法:
1、正則對象的方法test()
用於校驗指定字符串是否符合正則規定的匹配規則,符合返回true不符合返回false
var str="Hello World!";
// 檢測是否存在英文字母h
var reg=/h/i;
// var reg=new RegExp("h","i")
console.log(reg.test(str));
注意!當正則爲全局匹配,那麼test()就會存在匹配的錨點,存在多個值時,多次輸出,最後一次多輸出一次false,當再次匹配時,重複前面的輸出信息
var str="Hello World!";
var reg=/l/g;
console.log(reg.test(str))//true
console.log(reg.test(str))//true
console.log(reg.test(str))//true
console.log(reg.test(str))//falose
console.log(reg.test(str))//true
console.log(reg.test(str))//true
console.log(reg.test(str))//true
console.log(reg.test(str))//falose
2、字符串的方法:match()
用於字符串中符合匹配正則的字符串/字符,如果沒有返回的返回null,如果有返回裝有返回規則的字符串的數組
reg=/o/g;
console.log(str.match("o"));//["o", index: 4, input: "Hello World!", groups: undefined]
console.log(str.match(reg));//(2) ["o", "o"]
3、字符串方法:replace()
將中的字符串替換爲參數2的字符串,此方法不會對原來的字符串產生影響,會將替換後的結果返回
console.log(str.replace("l","a"))//Healo World!
var reg=/l/g;
console.log(str.replace(reg,"a"))//Heaao Worad!
console.log(str)//Hello World!
4、字符串的方法:split("") 也可以填寫正則作爲參數
元字符
在正則表達式中已經定義好作用與意義的特殊字符
如果要在正則中匹配元字符需要使用\對元字符進行轉義:. ^ $ ( ) [ ] { }
針對於帶有\的元字符,正則需要轉義,匹配的字符串中也需要轉義
.:可以匹配除了\n只外的所有字符
\d:可以匹配0-9中的任意一個字符
\D:可以匹配除了數字外的所有字符
\w:可以匹配數字、字母、_中的任意一個
\W:可以匹配除了數字、字母、_中的任意一個
\s:可以匹配空格:空格,tab,\n
\S:匹配除了空格外的字符
\u4e00-\u9fa5代表所有的漢字
其他
():表示組匹配:會將(),包裹的字符作爲一個整體進行匹配,並且默認情況下會將匹配的結果進行捕獲,暫存於RegExp對象中
(?:abc)->"abc",表示不希望存儲只是匹配
console.log(/h(ell)/.test(str));//true
console.log(RegExp.$1)//ell //$0-$9
console.log(/h(e)(l)(l)/.test(str));//true
console.log(RegExp.$1)//e
console.log(RegExp.$2)//l
console.log(RegExp.$3)//l
console.log(RegExp.$4)//空
[]:表示匹配的區間或多個選項,當在[]出現連續的字符時,可以將首位字符通過"-"連字符表示一段連續的區間,[A-z]/表示連續的A-z的字符,當在[]中出現^表示脫字符(只能出現在[]開頭),表示匹配除了指定數字以外的字符,[^0-9]與\D一樣
var reg=/[1234567890]/;//表示可匹配1-0的某一個,多個選項
var reg=/[0-9]/;
var reg=/\d/;
// 以上三者等價
{}:表示指定字符出現的次數
var reg=/\d{11}/;//表示數字必須連續出現11次
var reg=/\d{1,11}/;//表示數字必須出現至少一次,至多11次
var reg=/\d{1,}/;//表示數字必須連續出現至少一次,可以連續多次出現
量詞:表示指定字符出現的次數
?:表示{0,1},指定字符至少出現0次,至多1次
*:表示{0,},指定字符至少出現0次
+:表示{1,},指定字符至少出現1次
首尾符號
^:可以匹配指定字符開頭
$:可以匹配指定字符結尾
var str="\nhello wolrd\n";
// var reg1=/^hello/;//以hello開頭
// var reg2=/wolrd$/;
// console.log(reg1.test(str),reg2.test(str));//false false
var reg1=/^hello/m;
var reg2=/wolrd$/m;
var reg3=/^hello wolrd$/m;
console.log(reg1.test(str),reg2.test(str),reg3.test(str));//true true true
var reg0=/^http|https$/;//表示開頭是http或https且結尾也是http或https
var reg00=/^(http|https)$/;//表示類容
var str0="httphttp";
console.log(reg0.test(str0))//true
|:表示或者可以存在多個,不能寫在[]裏面,可以直接寫在正則或小括號中,[]中不能寫(),()中可以出現[]
常見正則實例
實例1:文本粘貼去除標籤
var str='<p id="=box" class="boxes">從前有座山,山上有座廟,廟裏有個老和尚,老和尚對小和尚說:“從前有座山,山上有座廟,廟裏有個老和尚,老和尚對小和尚說”;</p>';
// 要求就是將字符串中的標籤去掉(替換成"")
// 標籤的規則
// 1、以<爲開頭,且以>結尾
// 2、<>之間可以存在多位任意字符
// 3、閉合標記裏面的/需要轉義,出現次數0次或1次
var reg=/<[^>]+>/g;
console.log(str.match(reg))
var newStr=str.replace(reg,"")
console.log(newStr)
實例2:實名認證,驗證常規名字
規則
1、必須以中文開頭,以中文結尾
2、名字長度爲2-4字
relName.onchange=function(){
var nameStr=this.value;
var reg=/^[\u4e00-\u9fa5]{2,4}$/;
if(reg.test(nameStr)){
alert("驗證成功!");
}else{
alert("驗證失敗!");
}
}
實例3:qq號碼驗證
規則:
1、全都爲數字
2、位數最少5位,最多11位
3、第一位不爲0
var reg=/^[1-9]\d{4,10}$/;
實例4:手機號碼驗證
實例5:郵箱驗證
實例6:敏感詞彙過濾