1.正则中的特殊字符
\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 
-或- 
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" 
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" 
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa 
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa 
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba 
(x) 匹配x保存x在名为$1...$9的变量中 
x|y 匹配x或y 
{n} 精确匹配n次 
{n,} 匹配n次以上 
{n,m} 匹配n-m次 
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 
[\b] 匹配一个退格符 
\b 匹配一个单词的边界 
\B 匹配一个单词的非边界 
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
\d 匹配一个字数字符,/\d/ = /[0-9]/ 
\D 匹配一个非字数字符,/\D/ = /[^0-9]/ 
\n 匹配一个换行符 
\r 匹配一个回车符 
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ 
\t 匹配一个制表符 
\v 匹配一个重直制表符 
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
\ f 换页符 
\ n 换行符 
\ r 回车 
\ t 制表符 

i 执行大小写不敏感的匹配 
g 执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了

                   *:除属性 g 和 i 之外,正则表达式就没有其它像属性一样的特性了.如果将构造函数 RegExp 的静态属性 multiline 设置为 true ,那么模式匹配将以多行的模式进行.                       在这种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾.例如: 模式 /Java$/ 匹配的是 "Java",但是并不                         匹配

                       "Java\nis fun" .如果我们设置了 multiline 属性,那么后者也将被匹配:

                        RegExp.multiline = true;

     [a-z] //匹配所有的小写字母 
     [A-Z] //匹配所有的大写字母 
     [a-zA-Z] //匹配所有的字母 
     [0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 [ \f\r\t\n] //匹配所有的白字符


^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示"非"或"排除"的意思,常常用来剔除某个字符。

2.定义正则表达式的方法
var reg=//
var reg=new RegExp()


3.正则表达式对象的方法
    compile 正则表达式比较 
exec 执行查找 
test 进行匹配 
toSource 返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。 
toString 返回特定对象的串。重载Object.toString方法得到的。 
valueOf 返回特定对象的原始值。重载Object.valueOf方法得到 

4.exec方法:

如果 exec 方法没有找到匹配,将返回 null如果找到匹配项,则 exec 方法返回一个数组,并将更新全局 RegExp 对象的属性以反映匹配结果。数组元素 0 包含了完整的匹配项,而元素 1 到 n 包含的是匹配项中出现的任意一个子匹配项。这相当于没有设置全局标志 (g) 的 match 方法的行为。

如果为正则表达式设置了全局标志,则 exec 从 lastIndex 值指示的位置开始搜索字符串。如果没有设置全局标志,则 exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

exec 方法返回的数组有三个属性:inputindex 和 lastIndexinput 属性包含整个被搜索的字符串。 index 属性包含了在整个被搜索字符串中匹配的子字符串的位置。 lastIndex 属性中包含了匹配中最后一个字符的下一个位置。

eg:

var objStr="我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999";

var reg=/13(\d)(\d{8})/g;

var arr=reg.exec(objStr);

console.log(arr);

=======>结果:

          Array[3]

    1. 0:"13522222222"//存储匹配到的字符串
    2. 1:"5"//第一组匹配到的字符串
    3. 2:"22222222"//第二组匹配到的字符串
    4. index:5
    5. input:"我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999"
    6. length:3
5.利用正则封装模板替换代码
/*  抽取为一个方法
    为了 替换 模板中的 {name}这类文字
    参数1:使用模板 既挖好坑的 字符串 {name} 这样的
    参数2:对象
 */
function my_template(templateString, obj) {
    // 定义正则
    var reg = /{(\w+)}/;

    // 查找并替换 需要通过循环的方式 去确定次数
    var result;
    // 这里只写了一个=号 会先将括号中的 代码执行掉 判断正则验证完毕之后的结果 如果为null 跳出
    while (result = reg.exec(templateString)) {
        // 进行替换  0:{name}  1:name
        // 从结果中获取 替换的文本 以及 属性的名字
        var replaceString = result[0];
        var key = result[1];

        // 替换我们传入的 这个 模板字符串
        templateString = templateString.replace(replaceString, obj[key]);
    }

    // 如果能够执行到这里 说明 替换完毕了
    // console.log(templateString);

    // 放心大胆的 return
    return templateString;
}