正则表达式
脑子欠抽,对于正则表达式一直看了又忘,看了又忘,还是记录下来一些较常用的东西,方便以后查阅的好。
1 : 匹配一个位置,用来区分单词边界,hi 可以匹配单词hi,为边界符
2 .* 表示出了换行符意外的任意字符,并且可以重复任意多个,hi.*hello 匹配hi abcdefb hello
3 d表示数字,重复次数可以用大括号括起来 0d{2}-d{8}
4 s匹配任意的空白符
5 w匹配字符或数字或下划线或汉字等 aw*
6 d+ 表示1个或者更多连续的数字,和*类似,但*可能是0,而+则至少有1个, w{6}, ?表示出现一次或者不出现
7 ^匹配开头,$匹配结尾,例如验证QQ号位数 ^d{5,12}$
8 \字符串转义, *和 .等
9 [aeiou] 中括号来匹配字符集 [.?!]或者[0-9]等价于d, [a-z0-9A-Z]等价于w(只考虑英文的话)
10 复杂例子 (?0d{2}[)-]?d{8} 可拆分为 (?--0--d{2}--[)-]?--d{8}
11 | 分支条件 d{5}-d{4}|d{5}匹配美国的邮政编码,5位数字或者用连字号间隔的9位数字,注意与d{5}|d{5}-d{4}的区别
12 () 分组,用()分了组之后,你就可以利用{}指定这个分组的重复次数了 (d{1,3}.){3}d{1,3}
13 反义 W表示非字符数字下划线汉字的字符
1 S表示非空白符的字符 2 D表示非数字的字符 3 B表示不是单词开头或结束的位置 4 [^x]中的^类似!的作用,表示非,这里匹配除了x意外的任意字符 5 [^aeiou]匹配除了aeiou意外的任意字符 6 <a[^>]+>匹配用尖括号括起来的以a开头的字符串
14 exec方法:
1 function execReg(reg, str) { 2 3 var result = reg.exec(str); 4 alert(typeof result); 5 } 6 var reg = /(w)(w)(.+)/; 7 var str = 'bbs.bblueidea.com'; 8 execReg(reg,str);
结果为:
1 result[0]:bbs.bblueidea.com 2 result[1]:b 3 result[2]:b 4 result[3]:s.bblueidea.com
由上面例子可见,返回对象[0]就是整个正则表达式所匹配的内容。后续的元素则是各个子正则表达式的匹配内容。
15.test方法: /abc/.test('abcd') 返回true
16 g, i, m: g表示全局匹配,i表示忽略大小写,m表示多行匹配,'abcabc'.match(/ab/)将返回["ab"];
'abcabc'.match(/ab/g)将返回["ab","ab"];
17 replace方法:'bbs.baidu.com'.replace(/b/g, 'c');在replace函数中使用$引用子正则表达式匹配内容,例如:
var a = 'haha hoho'.replace(/(w+)s(w+)/, '$2 $1');
结果为: a='hoho haha';
由于$的特殊含义,所以如果希望使用$这个字符的话需要写成$$,
var a = 'haha hoho'.replace(/(w+)s(w+)/, '$$ $$');
结果为: a='$ $';
18.search方法,str.search(reg)返回第一次匹配的位置;
19.split方法,str.split(reg, 'seprator')返回分割后的数组
20.match方法,str.match(searchValue||regexp)
match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
一个例子理解正则表达式: