1. 程式人生 > 其它 >js正則表示式及語法

js正則表示式及語法

技術標籤:jsjavascript

正則 :

正則表示式(regular expression)描述了一種字串匹配的模式(pattern),
可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

1.定義正則表示式:
	a.普通方式:var reg=/表示式/附加引數
		附件引數:
		g:代表可以進行全域性匹配。
		i:代表不區分大小寫匹配。
		m:代表可以進行多行匹配。
		例子:
		var reg=/a*b/;
		var reg=/abc+f/g;
	b.建構函式方式:var reg=new RegExp(“表示式”,”附加引數”);
		例子:
		var
reg=new RegExp(“a*b”); var reg=new RegExp(“abc+f”,”g”); 兩者區別: a.普通方式中的表示式必須是一個常量字串,而建構函式中的表示式可以是常量字串, 也可以是一個js變數,例如根據使用者的輸入來作為表示式引數等等: var reg=new RegExp(document.forms[0].exprfiled.value,”g”); b.安卓端正常,IOS端會不零寬斷言,會有如下報錯: //Invalid regular expression: invalid group specifier name 常用零寬斷言:?
<=?<!?!?= c.ios端有些環境不支援 / / 表示式的正則,但是都支援 new RegExp()建構函式
表示式物件(RegExp)方法:
	1.exec(str),返回str中與表示式相匹配的第一個字串,而且以陣列的形式表現,
	當然如果表示式中含有捕捉用的小括號,則返回的陣列中也可能含有()中的匹配字串,例如:
	var regx=/\d+/;
	var rs=regx.exec(3432ddf53”);
	返回的rs值為:[3432]
	
	2.test(str),判斷字串str是否匹配表示式,返回一個布林值。例如:
	var regx=/user/d+/g;
	var
flag=regx.test(“user12dd”); flag的值為true。 字串String 物件方法: 1.match(expr),返回與expr相匹配的一個字串陣列,如果沒有加引數g, 則返回第一個匹配,加入引數g則返回所有的匹配 例子: var regx=/user\d/g; var str=“user13userddduser345”; var rs=str.match(regx); rs的值為:[user1,user3] 2.search(expr),返回字串中與expr相匹配的第一個匹配的index值。 沒有匹配項時,返回-1,search() 方法不執行全域性匹配,它將忽略標誌 g 例子: var regx=/user\d/; var str=“user13userddduser345”; var rs=str.search(regx); rs的值為:0 3.replace(expr,str),將字串中匹配expr的部分替換為str。 另外在replace方法中,str中可以含有一種變數符號$,格式為$n, 代表匹配中被記住的第n的匹配字串(注意小括號可以記憶匹配)。 進行全域性替換(此時表示式必須附加引數g,否則也只是替換第一個匹配) 例子: var regx=/user\d/g; var str=“user13userddduser345”; var rs=str.replace(regx,00); rs的值為:003userddd0045 例子2var regx=/u(se)r\d/g; var str=“user13userddduser345”; var rs=str.replace(regx,”$1); rs的值為:se3userdddse45
字元組:
\b:代表著單詞的開頭或結尾,作為單詞的分界處。
\d就是[0-9]。表示是一位數字。
\D就是[^0-9]。表示除數字外的任意字元。
\w就是[0-9a-zA-Z_]。表示數字、大小寫字母和下劃線。
\W[^0-9a-zA-Z_]。非單詞字元。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平製表符、垂直製表符、換行符、回車符、換頁符。
\S[^ \t\v\n\r\f]。 非空白符。

[]的使用:  //很多元字元在字元組內都變成了普通字元
[abcdef] 這個正則表示式匹配abcdef中其中一個字母,
[.?!]這個正則表示式匹配裡面三個標點符號中的其中一個。
[0-9]匹配09這段區間中任意一個數字(包括09)。
[a-z]這裡就是匹配a到z這段區間其中一個字母
[0-9a-zA-Z]就是匹配 09、a到z、AZ 這三個區間的其中一個區間的其中一個字元或數字
[\s*]表示空格或者*號。
[^0-9]表示除數字外的任意字元。

量詞:
{m,} 表示至少出現m次。
{m} 等價於{m,m},表示出現m次。
? 等價於{0,1},表示出現或者不出現。記憶方式:問號的意思表示,有嗎?
 	//eg:a\d? 匹配的是以字元a開頭的,後面跟著0個或一個數字的字串:a、a5、a9
+ 等價於{1,},表示出現至少一次。記憶方式:加號是追加的意思,得先有一個,然後才考慮追加。
* 等價於{0,},表示出現任意次,有可能不出現。
* 
分支
(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一	
//eg:020-88888888 (020)88888888。要讓讓這兩種形式的寫法都可以匹配,我們就要寫兩種形式的正則表示式
//匹配020-88888888 的正則表示式可以寫為:0\d{2}-\d{8};
//匹配(020)88888888的正則表示式我們可以寫成:(0\d{2})\d{8}。
//如果要使這兩個正則表示式一起匹配一個字串,
//那麼就要用到“或”符號來連線他們了:0\d{2}-\d{8}|(0\d{2})\d{8} 。