01JavaScript正則

正則表達式

規則表達式(英語: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:敏感詞彙過濾

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章