正則表達式語法參考
var=/a/gi 兩個/線分隔是模式,最后g表示全局,i表示字母不辨別大小
re = /s/;// s匹配任何空白字符,包括空格、制表符、換頁符等等
str= "user Name";//用戶名包括空格
alert(re.test(str));//true
str = "user Name";//用戶名包括制表符
alert(re.test(str));//true
re = /^[a-z]+.$/i; //^表示開始 $表示字符結束位置
alert(re.test("hi111tt"));//false
alert(re.test("h.")); //true
var re = /^[a-z]+s+d+$/i; //+號表示字符最少要出現1次,s表示空白字符,d表示1個數字
alert(re.test("abc 11222")); //true
alert(re.test("abc 11222abc")); //fals
//當時我們想取出里面的數字
re = /d+/
var result = re.exec(str);
alert(result); //11222
//更復雜的用法,使用子匹配
//exec返回的數組第1到n元素中包括的是匹配中出現的任意1個子匹配
re=/^[a-z]+s+(d+)$/i;//用()來創建子匹配
arr =re.exec(osVersion);
alert(arr[0]);//全部osVersion,也就是正則表達式的完全匹配
alert(arr[1]);//8,第1個子匹配,事實也能夠這樣取出主版本號
alert(arr.length);//2
osVersion = "Ubuntu 8.10";//取出主版本號和次版本號
re = /^[a-z]+s+(d+).(d+)$/i;//.是正則表達式元字符之1,若要用它的字面意義須轉義
arr = re.exec(osVersion);
alert(arr[0]);//完全的osVersion
alert(arr[1]);//8
alert(arr[2]);//10
//String對象的1些和正則表達式有關的方法
//replace方法,用于替換字符串
var str ="some money";
alert(str.replace("some","much"));//much money
//replace的第1個參數可以為正則表達式
var re = /s/;//空白字符
alert(str.replace(re,"%"));//some%money
//在不知道字符串中有多少空白字符時,正則表達式極其方便
str ="some some some f";
re = /s+/;
alert(str.replace(re,"#"));//但是這樣只會將第1次出現的1堆空白字符替換掉
//由于1個正則表達式只能進行1次匹配,s+匹配了第1個空格后就退出了
re = /s+/g; //g,全局標志,將使正則表達式匹配全部字符串
alert(str.replace(re,"@"));//some@some@some@
//另外一個與之類似的是split,以某個字符分隔
var str = "a-bd-c";
var arr = str.split("-");//返回["a","bd","c"]
str = "a_db-c";//用戶以他喜歡的方式加分隔符s
re=/[^a-z]/i;//前面我們說^表示字符開始,但在[]里它表示1個非字符集
//匹配任何不在指定范圍內的任意字符,這里將匹配除字母處的所有字符
arr = str.split(re);//仍返回["a","bd","c"];
//在字符串中查找時我們經常使用indexOf,與之對利用于正則查找的方法是search,找不到返回⑴
str = "My age is 18.Golden age!";//年齡不是1定的,我們用indexOf不能查找它的位置
re = /d+/;
alert(str.search(re));//返回查找到的字符串開始下標10
//注意,由于查找本身就是出現第1次就立即返回,所以無需在search時使用g標志
//下面的代碼雖然不出錯,但g標志是過剩的
re=/d+/g;
alert(str.search(re));//依然是10
var str = "My name is Chenfei.Hello everyone!";
var re = /[A-Z]/;//匹配所有大寫字母
var arr = str.match(re);//返回數組
alert(arr);//數組中只會包括1個M,由于我們沒有使用全局匹配
re = /[A-Z]/g;
arr = str.match(re);
alert(arr);//M,C,J,H
//從字符串中抽取單詞
re = /[a-z]*/gi;//表示單詞邊界 *表示0個或多個
str = "one two three four";
alert(str.match(re));//one,two,three,four
//RegExp對象的靜態屬性
//input 最后用于匹配的字符串(傳遞給test,exec方法的字符串)
var re = /[A-Z]/;
var str = "Hello,World!!!";
var arr = re.exec(str);
alert(RegExp.input);//Hello,World!!!
re.exec("tempstr");
alert(RegExp.input);//依然是Hello,World!!!,由于tempstr不匹配
//lastMatch 最后匹配的字符
re = /[a-z]/g;
str = "hi";
re.test(str);
alert(RegExp.lastMatch);//h
re.test(str);
alert(RegExp["$&"]);//i ,$&是lastMatch的短名字,但由于它不是合法變量名,所以要。。
//lastParen 最后匹配的分組
re = /[a-z](d+)/gi;
str = "Class1 Class2 Class3";
re.test(str);
alert(RegExp.lastParen);//1
re.test(str);
alert(RegExp["$+"]);//2
//leftContext 返回被查找的字符串中從字符串開始位置到最后匹配之前的位置之間的字符
//rigthContext 返回被搜索的字符串中從最后1個匹配位置開始到字符串結尾之間的字符
re = /[A-Z]/g;
str = "123ABC456";
re.test(str);
alert(RegExp.leftContext);//123
alert(RegExp.rightContext);//BC456
re.test(str);
alert(RegExp["$`"]);//123A
alert(RegExp["$'"]);//C456
re = /[A-Z]+/g;
str = "123ABC456";
re.test(str);
alert(RegExp.leftContext);//123
alert(RegExp.rightContext);//456
//使用元字符注意事項:元字符是正則表達式的1部份,當我們要匹配正則表達式本身時,//必須對這些元字符轉義.下面是正則表達式用到的所有元字符
( [ { ^ $ | ) ? * + .
var str = "?";
var re = /?/;
alert(re.test(str));//出錯,由于?是元字符,必須轉義
re = /?/;
alert(re.test(str));//true
下面是正則表達式中的預定義類
代碼 同等于 匹配
. IE下[^
],其它[^
] 匹配除換行符以外的任何1個字符
d [0-9] 匹配數字
D [^0-9] 匹配非數字字符
s [
fx0B] 匹配1個空白字符
S [^
fx0B] 匹配1個非空白字符
w [a-zA-Z0-9_] 匹配字母數字和下劃線
W [^a-zA-Z0-9_] 匹配除字母數字下劃線以外的字符
* 匹配前面的子表達式零次或屢次。例如,zo* 能匹配 “z” 和 “zoo”。 * 等價于{0,},表示可以有0個或多個o。
+ 匹配前面的子表達式1次或屢次。例如,’zo+’ 能匹配 “zo” 和 “zoo”,但不能匹配 “z”。+ 等價于 {1,}。
? 匹配前面的子表達式零次或1次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等價于 {0,1}。
{n} n 是1個非負整數。匹配肯定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。
{n, } n 是1個非負整數。最少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等價于 ‘o+’。’o{0,}’ 則等價于 ‘o*’。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, “o{1,3}” 將匹配 “fooooood” 中的前3個 o。’o{0,1}’ 等價于 ‘o?’。請注意在逗號和兩個數之間不能有空格。
下一篇 路遙短篇小說之《匆匆過客》