日期:2014-05-16  浏览次数:20311 次

Js正则学习1

正则表达式

1.var re = new RegExp("cat","g");

2.var re = /cat/gi;

注:i——忽略大小写;g——全局匹配;m——匹配多行

?

RegExp的方法

1.test()——找到匹配返回true,否则返回false

? ?var s = "aacat";

? ?var re = /cat/;

? ?alert(re.test(s)); ?//返回true

2.exec()——在字符串中搜索,并把匹配结果用一个数组返回

? ?var s = "a bat, a cat, aa";

? ?var re = /at/;

? ?var r = re.exec(s); ?//只返回第一个at

?

String的方法

1.match()——类似于exec,返回存放匹配结果的整个数组

2.search()——返回匹配项在字符串中的位置索引,没有返回-1

3.replace()——将匹配替换成指定字符串

? ?var dt = '12-01-2007';

? ?dt.replace(/^(\d{2})-(\d{2})-(\d{4})^/,'$3$2$1'); ?//返回20070112

注:replace的第二个参数可以是函数,该函数可以接受一个参数,该参数是匹配了前面正则的文本

4.split()——将字符串分割成一系列字串并通过一个数组将他们返回

? ?var s = "red,blue,yellow,green";

? ?var re = /\,/;

? ?var a = s.split(re);

注:后两个是扩展字符串的常用方法

?

元字符

()[{\^$|)?*+. ?需要用\来转义

?

字符类

1.简单类 /bac/

2.负向类 /[^ac]/

3.范围类 /[a-v]/

注:JavaScript不支持联合类和交叉类,如[a-m[p-z]] [a-m[^b-e]]

?

预定义类

. [^\n\r]——除了换行和回车之外的任意字符

\d [0-9]——数字

\D [^0-9]——非数字字符

\s [ \t\n\x0B\f\r]——空白字符

\S [^ \t\n\x0B\f\r]——非空白字符

\w [a-zA-Z_0-9]——单词字符

\W [^a-zA-Z_0-9]——非单词字符

?

量词

?——出现零次或一次

*——出现零次或多次

+——出现一次或多次

{n}——定出现n次

{n,m}——至少出现n次但不超过m次

{n,} ——至少出现n次

?

贪婪的、惰性的和支配性的量词

1.贪婪量词——先看整个字符串是否匹配。如果没有匹配,则去掉字符串的最后一个字符,并再次尝试匹配。直到发现一个匹配,或者字符串不剩任何字符。

——所有量词自身都是贪婪的 ?

2.惰性匹配——先看字符串中第一个字符是否匹配,如果不匹配则在读入下一个字符。直到发现一个匹配或者整个字符串都没有匹配

——所有量词后面加上?是惰性的 ??

3.支配量词——只尝试匹配整个字符串,若不匹配则不再尝试。

——所有量词后面加上+是支配性的 ?+

?

例子:

var s = "abbbaabbbaaabbb1234";

var r1 = /.*bbb/g;

var r2 = /."?bbb/g;

var r3 = /.*+bbb/g;

注:惰性量词的工作方式和贪婪相反;很多浏览器不支持支配量词。

?