javascript之正则表达式学习笔记

正则表达式的声明

直接写在//之间

var reg = /...../;

 

使用RegExp()构造函数

var reg = new RegExp(......);

 

 

ECMAscript 3RegExp对象类似于引用对象,在ECMAscript 5RegExp对象类似于值对象。

var reg= /a/;

var reg2 =/a/;

console.log(reg === reg2);//ES3标准返回true,ES5返回false

//此时在ES3中reg与reg2指向同一个对象

//在ES5中reg与reg2为两个不同的对象

 

 

转义字符

正则表达式所有字符都按直面量进行匹配。加入反斜杠(\)可进行转义。

 

预定义类

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

 \d [0-9] 数字字符digit

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

 \w [a-zA-Z0-9_] 单词字符(所有的字母数字和_ ) word

 \W [^a-zA-Z0-9_] 非单词字符

 \s [\f\r\n\t\v] 不可见字符 space

 \S [^\f\r\n\t\v] 可见字符

 

量词

"*" 重复零次或更多 x>=0

"+" 重复一次或更多次 x>=1

"?" 重复零次或一次  x=(0||1)

{n} n x=n

{n,} 重复n次或更多  x>=n

{n,m} 重复出现的次数比n多但比mn<=x<=m

 

非贪婪匹配

当以上字符后再加入一个?时将进行非贪婪匹配如*?,??,+?.{n,m}?

进行贪婪匹配时将尽可能少的匹配内容

/a+/匹配aaa时将回匹配全部a即匹配“aaa”,而/a+?/匹配aaa时将匹配一个“a”。

需要注意的是非贪婪匹配从第一个匹配到的值开始。

例如使用/a+?b/匹配aaab时并不会按最少的匹配ab。而是匹配aaab。这是因为匹配是从第一个a开始匹配所以也会把之前的a都匹配到。

 

选择

“|”分割用于选择的字符

a|b|c可匹配a或者b或者c

 

分组

“( )”可用于分组调用exec方法返回Array对象,0位置为匹配到的完整内容,之后位置为”( )”所分组的数据。

var str = "abcdefg";

var r = /c(d(e))/;

console.log(r.exec(str));  //["cde", "de", "e", index: 2, input: "abcdefg"]

 

 

在“(”后跟“?:”表示不获取

var str = "abcdefg";

var r = /c(?:d(e))/;

console.log(r.exec(str)); // ["cde", "e", index: 2, input: "abcdefg"]  不获取de

 

 

元字符[ ]

匹配一个出现在 [] 中的字符。

 

var str1 = "abcde";

var str2 = "fghig";

var r = /[bg]/;

console.log(r.exec(str1)[0]); //b

console.log(r.exec(str2)[0]); //g

 

 

使用 [] 匹配多个字符:[a-z] [A-Z]

表示否定意思:[^abc]  不匹配^之后的字符

 

元字符^$

^ 表示必须以某某开头

$ 表示必须以某某结尾

 

var r1 = /^a/;

var r2 = /a$/;

str1 = "ab";

str2 = "ba";

console.log(r1.test(str1));  //true

console.log(r1.test(str2));  //false

console.log(r2.test(str1));  //false

console.log(r2.test(str2));  //true

 

 

当同时出现^$时表示精确匹配

var r1 = /^asd$/;

str1 = "asd";

str2 = "a-s-d";

console.log(r1.test(str1));  //true

console.log(r1.test(str2));  //false

 

 

正则替换与组引用

replace方法第一个参数可以用正则表达式来表示需要被替换的内容。

 

var r1 = /^asd$/;

str1 = "LandMine LLLLLL";

str1 = str1.replace(/L/g,"l"); //g表示全局匹配

console.log(str1);  //landMine llllll

 

 

第二个参数出现$后跟数字表示正则组引用

var s = '1991-1-2';

s = s.replace( /(\d+)-(\d+)-(\d+)/g, "$1年$2月$3日" );

console.log(s); //1991年1月2日

 

posted @ 2016-04-10 11:27  地雷  阅读(214)  评论(0编辑  收藏  举报