正则表达式笔记

by Aaron:http://www.cnblogs.com/aaronjs/archive/2012/06/30/2570970.html ;本篇给本身看的,主要是笔记html

 

正则表达式能够:
•测试字符串的某个模式。例如,能够对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证 
•替换文本。能够在文档中使用一个正则表达式来标识特定文字,而后能够所有将其删除,或者替换为别的文字 
•根据模式匹配从字符串中提取一个子字符串。能够用来在文本或输入字段中查找特定文字
 
正则表达式就是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。 该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式做为一个模板,将某个字符模式与所搜索的字符串进行匹配。 
 
var re=new RegExp("a","i");
正则表达式还有另外一种正则表达式字面量的声明方式
var re=/a/gi;
RegExp构造函数第一个参数为正则表达式的文本内容,而第一个参数则为可选项标志。标志能够组合使用
•g (全文查找) 
•i (忽略大小写) 
•m (多行查找) 
 
正则表达式对象的方法:
•test,返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。若是存在则返回 true,不然就返回 false。 
•exec,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。 
•compile,把正则表达式编译为内部格式,从而执行得更快。 
 
正则表达式对象的属性 :
•source,返回正则表达式模式的文本的复本。只读。 
•lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。 
•1.....9,返回九个在模式匹配期间找到的、最近保存的部分。只读。 
•input ($_),返回执行规范表述查找的字符串。只读。 
•lastMatch ($&),返回任何正则表达式搜索过程当中的最后匹配的字符。只读。 
•lastParen ($+),若是有的话,返回任何正则表达式查找过程当中最后括的子匹配。只读。 
•leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配以前的位置之间的字符。只读。 
•rightContext ($'),返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。 
 
String对象一些和正则表达式相关的方法 :
•match,找到一个或多个正则表达式的匹配。 
•replace,替换与正则表达式匹配的子串。 
•search,检索与正则表达式相匹配的值。 
•split,把字符串分割为字符串数组。 
 
另处,还有一些其它的预约义特殊字符,以下表所示: 

字符    描述 
\n      换行符 
\r      回车符 
\t      制表符 
\f      换页符(Tab) 
\cX     与X对应的控制字符 
\b      退格符(BackSpace) 
\v      垂直制表符 
\0      空字符("") 
 
下面是正则表达式中的预约义类 


代码  等同于                  匹配 
.     IE下[^\n],其它[^\n\r]  匹配除换行符以外的任何一个字符 
\d    [0-9]                   匹配数字 
\D    [^0-9]                  匹配非数字字符 
\s    [ \n\r\t\f\x0B]         匹配一个空白字符 
\S    [^ \n\r\t\f\x0B]        匹配一个非空白字符 
\w    [a-zA-Z0-9_]            匹配字母数字和下划线 
\W    [^a-zA-Z0-9_]           匹配除字母数字下划线以外的字符 
 
 
栗子:
脱字符(^)表明字符开始位置,$表示字符结束位置。
var re=/he$/i;
    var str="Certainly!He loves her!";
    str="HE";
    alert(re.test(str));
 
var osVersion="Ubuntu 8";
    var re=/^[a-z]+\s+\d+$/i;// +号表示字符至少要出现1次,\s表示空白字符,\d表示一个数字
    alert(re.test(osVersion));//true
    exec能够用来取字符,看那些字符匹配了模式
    re=/\d+/;
    var arr=re.exec(osVersion);
    alert(arr[0]);//8
 
//子匹配
    //exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配
    var re=/^[a-z]+\s+(\d+)$/i;// 用()来建立子匹配
    arr=re.exec(osVersion);
    alert(arr[0]);//Ubuntu 8
    alert(arr[1]);//8
    alert(arr.length);//2
 
    var re=/^[a-z]+\s+(\d+)\.(\d+)$/i;/ /.是正则表达式元字符之一,若要用它的字面意义必须转义
    arr=re.exec(osVersion);
    alert(arr[0]);//Ubuntu 8
    alert(arr[1]);//8
    alert(arr[2]);//10
    alert(arr.length);//3
 
注意,当字符串不匹配re时,exec方法将返回null;
 
    var str="a_bd-c";
    var re=/[^a-z]/i;// 前面咱们说^表示字符开始,但在[]里它表示一个负字符集
    //匹配任何不在制定范围内的任意字符,这里将匹配字符处的全部字符
    var arr=str.split(re);//仍返回["a","bd","c"];
 
在字符串中查找时咱们经常使用indexOf,与之对应用于正则查找的方法是search
    str="My age is 18.Golden age!";
    re=/\s+/;
    alert(str.search(re));//10 返回下标
 
    re=/\b[a-z]*\b/gi; //\b表示单词边界
    str="one two three four";
    alert(str.match(re));
 
使用元字符注意事项:元字符是正则表达式的一部分,当咱们要匹配正则表达式自己时,必须对这些元字符转义.下面是正则表达式用到的全部元字符 
( [ { \ ^ $ | ) ? * + . 
 
如何在正则表达式中使用特殊字符?
 
//ASCII方式用十六进制数来表示特殊字符
    var re=/^\x43\x4A$/;//将匹配CJ
    alert(re.test("CJ"));//true
//也可以使用八进制方式
    re=/^\103\112$/;
    alert(re.test("CJ"));//true
//还可使用Unicode编码
    re=/^\u0043\u004A$/;//使用Unicode,必须使用u开头,接着是字符编码的四位16进制表现形式
    alert(re.test("CJ"));//true
 
字符类---->>简单类,反向类,范围类,组合类,预约义类
//简单类
var re=/[abc123]/;//将匹配abc123折6个字符中一个
//负向类
re=/[^abc]/;//将匹配除abc以外的一个字符
//范围类
re=/[a-b]/;//将匹配小写a-b 26个字母
re=/[^0-9]/;//将匹配除0-9 10个字符之处的一个字符
//组合类
re=/[a-b0-9A-Z_]/;将匹配字母,数字和下划线
 
 
量词(下表量词单个出现时皆是贪婪量词) 

代码  描述 
*     匹配前面的子表达式零次或屡次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。 
+     匹配前面的子表达式一次或屡次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 
?     匹配前面的子表达式零次或一次。例如,"do(es)?" 能够匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 
{n}   n 是一个非负整数。匹配肯定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的两个 o。 
{n,}  n 是一个非负整数。至少匹配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" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 
 
贪婪量词与惰性量词 

•用贪婪量词进行匹配时,它首先会将整会字符串当成一个匹配,若是匹配的话就退出,若是不匹配,就截去最后一个字符进行匹配,若是不匹配,继续将最后一个字符截去进行匹配,直到有匹配为止。直到如今咱们遇到的量词都是贪婪量词 
•用惰性量词进行匹配时,它首先将第一个字符当成一个匹配,若是成功则退出,若是失败,则测试前两个字符,依些增长,直到遇到合适的匹配为止 
 
惰性量词仅仅在贪婪量词后面加个"?"而已,如"a+"是贪婪匹配的,"a+?"则是惰性的 
var str="abc";
var re=/\w+/;//将匹配abc
re=/\w+?/;//将匹配a
 
多行模式:
 
var re=/[a-z]$/;
var str="ab\ncdef";
alert(str.replace(re,"#"));//ab\ncde#
re=/[a-z]$/m;
alert(str.replace(re,"#"));//a#\ncde#
 
分组与非捕获性分组:
 
re=/abc{2}/;//将匹配abcc
re=/(abc){2}/;//将匹配abcabc
 //上面的分组都是捕获性分组
str="abcabc ###";
arr=re.exec(str);
alert(arr[1]);//abc
//非捕获性分组(?:)
re=/(?:abc){2}/;
arr=re.exec(str);
alert(arr[1]);//underfind
 
候选:
re=/^a|bc$/;//将匹配头a或尾bc
str="add";
alert(re.test(str));//true
re=/^(a|bc)$/;//将匹配a或bc
          str="bc";
alert(re.test(str));//true
 
其它——〉 正向前瞻,用来捕获出如今特定字符以前的字符,只有当字符后面跟着某个特定字符才去捕获它。与正向前瞻对应的有负向前瞻,它用匹配只有当字符后面不跟着某个特定字符时才去匹配它。在执行前瞻和负向前瞻之类的运算时,正则表达式引擎会留意字符串后面的部分,然而却不移动index 
 
//正向前瞻
    var re=/([a-z]+(?=\d))/i;
    //咱们要匹配后面跟一个数字的单词,而后将单词返回,而不要返回数字
    str="abc every1 abc";
    alert(re.test(str));//true
    alert(RegExp.$1);//every
    alert(re.lastIndex);//使用前瞻的好处是,前瞻的内容(?=\d)并不会当成一次匹配,下次匹配仍从它开始
    //负向前瞻(?!)
    re=/([a-z](?!\d))/i;
    //将匹配后面不包含数字的字母,而且不会返回(?!\d)中的内容
    str="abc1 one";
    alert(re.test(str));
    alert(RegExp.$1);//one 
相关文章
相关标签/搜索