正则表达式语法参考
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?’。请注意在逗号和两个数之间不能有空格。
下一篇 路遥短篇小说之《匆匆过客》