您的位置:首页 > Web前端 > JavaScript

Javascript 正则表达式 RegExp

2013-05-07 16:25 204 查看
其实正则表达式核心部分就是:有穷自动机(DFA或NFA),学过编译原理的应该比较清楚。

正则表达式:reg
字符串:str
reg.exec(str); 等同 str.match(reg);,且返回一个数组。

下面是查看一些资料总结(有删减),也用来提示自己:

*表示0次或者多次,等同于{0,}
+表示一次或者多次,等同于{1,}
?表示0次或者1次,等同于{0,1}

1、贪心模式
只要在合法的情况下,它们会尽量多去匹配字符。
例:reg = /c{3,4}/;
str='ccccTest';

str.match(reg);//"cccc"

能匹配四个的时候,正则绝对不会去匹配三个。

2、非贪心模式
如果我们希望正则尽量少地匹配字符,可以在表示数字的符号后面加上一个?。
组成如下的形式:
{n,}?, *?, +?, ??, {m,n}?

注意:贪心、非贪心模式,是在模式匹配之后再做判断的(我的理解)。

3、/^开头,结尾$/

4、点‘.’
‘.’会匹配字符串中除了换行符\n之外的所有字符

5、正则表达式中的或,“|“
例:reg = /^b|c.+/;
str='bbs.blueidea.com';
//匹配开头的b或者是c.+

6、括号
正则表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用。
例:reg = /^(b|c).+(c|b)/;

str='bssssssscddddd';

str.match(reg);//return
["bsssssssc", "b", "c"]

不记录子正则表达式的匹配结果
使用形如(?:pattern)的正则就可以避免保存括号内的匹配结果。
例:reg = /^(?:b|c).+/;

str='bbs.blueidea.com';

str.match(reg);//return
["bbs.blueidea.com"]

正向预查
(1)形式:(?=pattern)
要匹配的字符串,后面必须紧跟着pattern!
例:reg = /cainiao(?=8)/;
str='cainiao8';

str.match(reg);//return
["cainiao"]

需要注意的是,括号里的内容并不参与真正的匹配,只是检查一下后面的字符是否符合要求而已,例如上面的正则,返回的是cainiao,而不是cainiao8。
(2)形式(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern

7、字符集合[abc]

[abc]表示a或者b或者c中的任意一个字符。

[a-z],[A-Z],[0-9],分别表示小写字母,大写字母,数字。
例:reg = /^[a-zA-Z][a-zA-Z0-9_]+/;

8、反字符集合[^abc]
^在正则表达式开始部分的时候表示开头的意思,例如/^c/表示开头是c;
但是在字符集和中,它表示的是类似“非“的意思

9、边界与非边界
\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数。例如/\bc/就表示字符串开始的c或者是结尾的c。
与\b对应\B表示非边界。

10、数字与非数字
\d表示数字的意思,相反,\D表示非数字

11、空白
直接量字符:
\f匹配换页符
\n匹配换行符
\r匹配回车
\t匹配制表符(Tab键)
\v匹配垂直制表符。
注意:以上5种字符只需要在字符串中使用一个斜杆,例:str="test\nbbs";
\s匹配单个空格,等同于[\f\n\r\t\v]。

12、单词字符
\w表示单词字符,等同于字符集合[a-zA-Z0-9_]
\W表示非单词字符,等效于[^a-zA-Z0-9_] //不要看少了下划线

13、反向引用 这个挺好用
形式如下:/(子正则表达式)\1/
例1:reg = /(\w)\1/;
str='blueidea';
str.match(reg); //return
null。

这里的“\1”就叫做反向引用,它表示的是第一个括号内的字正则表达式匹配的内容。在上面的例子中,第一个括号里的(\w)匹配了b,因此“\1”就同样表示b了,在余下的字符串里自然找不到b了。
例2:reg = /(\w)(\w)\2\1/;

str='woow';

str.match(reg); //return ["woow"]

14、匹配元字符
则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符。
例:reg = /c\*/;
str='c*';
str.match(reg); //return
["c*"]

15、正则表达式的修饰符
(1)全局匹配,修饰符g(匹配所有的子模式)

如果正则表达式没有设置g,那么exec方法不会对正则表达式有任何的影响,如果设置了g,那么exec执行之后会更新正则表达式的lastIndex属性,表示本次匹配后,所匹配字符串的下一个字符的索引,下一次再用这个正则表达式匹配字符串的时候就会从上次的lastIndex属性开始匹配。
例:var reg = /b/g;
var str
='bs.ssblueidea.com';
var c = reg.exec(str);
//c.index=0;
var d = reg.exec(str);
//d.index=5;

(2)不区分大小写,修饰符i
形式:/pattern/i

(3)行首行尾,修饰符m
形式:/pattern/m
m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。
例:var reg = /^b/m;
var str =
'test\nbbs';
匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。

对于正则表达式,有很多应用
例:
替换字符串str中a或A为B
var str
="luafengAaA";
var result =
str.replace(/a/gi,"B");

alert(result);//"luBfengBaB"

RegExp方法

test:仅仅检查是否能够匹配str,并且返回布尔值以表示是否成功。

exec:检查是否能够匹配str,并且返回匹配值。
String方法

match:与正则表达式的exec方法类似,该方法同样返回一个类似数组的对象。
replace:形式:str. replace
(reg,’new str’);

它的作用是将str字符串中匹配reg的部分用’’new
str”部分代码,值得注意的是原字符串并不会被修改,而是作为返回值被返回。
例 :var reg =
/(\w+)\s(\w+)/;

var str = 'one two';

var newStr =
str.replace(reg,'$2 $1');

//结果为:two
one,也就是空格前后的单词被调换顺序了。

注意:由于在替换文本里$有了特殊的含义,所以我们如果想要是用$这个字符的话,需要写成$$。

search:返回正则表达式第一次匹配的位置
split:分割返回数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: