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:分割返回数组
正则表达式: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:分割返回数组
相关文章推荐
- JavaScript 正则表达式02
- JavaScript之RegExp(正则表达式)
- 正则表达式入门教程&&经典Javascript正则表达式(share)
- JavaScript RegExp 正则表达式对象详细说明
- php的正则表达式 '/\b\w…
- javascript 正则表达式的组、全局、RegExp.exec()和string.match()区别
- 正则表达式 @符号和#号--->@ 和# 
- javascript 中 正则表达式两种表达方式(regexp in javascript two ways expression)
- JavaScript-RegExp 正则表达式
- 正则表达式 特殊用法
- javascript正则表达式 —— RegExp 对象
- 理顺 JavaScript (19) - 正则表达式对象 RegExp
- javascript中正则表达式的(RegExp)的简单概念
- javascript正则表达式(RegExp)简述
- javascript正则表达式之二-RegExp对象
- javascript类型系统_正则表达式RegExp类型详解
- JavaScript语法入门系列(七) 类和对象(正则表达式RegExp)
- JavaScript之基础-10 JavaScript 正则表达式(概述、定义正则、RegExp对象、用于模式匹配的String方法)
- <转载>javascript正则表达式
- JavaScript 1.10 RegExp类型—正则表达式的使用方法(部分转载)