定义
  正则又叫规则或模式,是一个强大的字符串匹配工具。javascript通过RegExp类型来支持正则表达式
特性
  [1]贪婪性,匹配最长的
  [2]懒惰性,不设置/g,则只匹配第1个
写法
perl写法(使用字面量形式)
var expression = /pattern/flags; 
  模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符串、限定类、分组、向前查找以及反向引用。每个正则表达式可以带一个或多个标志(flags),用以标明正则表达式的行为。正则表达式支持三个标志:
  [1]g:表示全局模式(global)
  [2]i:表示不区分大小写(ignoreCase)
  [3]m:表示多行模式(multiline)
//匹配字符串所有'at'的实例 var pattern1 = /at/g;
RegExp构造函数
  RegExp构造函数接收两个参数:要匹配的字符串模式(pattern)和标志字符串(flags)(可选)
  [注意]RegExp构造函数的两个参数都是字符串。且使用字面量形式定义的任何表达式都可使用构造函数
//匹配字符串所有'at'的实例
var pattern = new RegExp('at','g'); 
两种写法的区别
  字面量写法不支持变量,只能用构造函数的形式来写
[tips]获取class元素(因为classname是变量,只能使用构造函数的形式)
function getByClass(obj,classname){
  var elements = obj.getElementsByTagName('*');
  var result = [];
  var pattern = new RegExp( '(^|\s)'+ classname + '(\s|$)');
  for(var i = 0; i < elements.length; i++){
    if(pattern.test(elements[i].className)){
      result.push(elements[i]);
    }
  }
  return result;
} 
  [注意]ES3中,正则表达式字面量始终共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。ES5中规定使用正则字面量必须像直接调用RegExp构造函数一样,每次都创建新的RegExp实例
语法
  [注意]正则表达式中不能出现多余空格
元字符(14个)
    () [] {}  ^ $ | ? * + .  
  [注意]元字符必须转义,即用 加转义字符,用new RegExp写的正则必须双重转义
转义字符
.      除换行符n之外的任意字符
d     数字
D     非数字
w     字母、数字、下划线
W     非字母、数字、下划线(汉字不属于w)
s     空格
S     非空格
b     边界符(w的左侧或右侧不是w,则会出现一个边界符)
B     非边界符
1     表示和前面相同的一个字符
t     制表符
v     垂直制表符
uxxxx 查找以十六进制xxxx规定的Unicode字符(u4e00-u9fa5代表中文)     
(w)(d)12 :1代表w当时所代表的值,2代表d当时所代表的值 
  [注意]正则表达式中的子项必须是用小括号括起来的,并且顺序以小括号的前括号出现的顺序为准
[tips]找出重复项最多的字符和个数
var str = 'aaaaabbbbbdddddaaaaaaaffffffffffffffffffgggggcccccce';
var pattern = /(w)1+/g;
var maxLength = 0;
var maxValue = '';
var result = str.replace(pattern,function(match,match1,pos,originalText){
  if(match.length > maxLength){
    maxLength = match.length;
    maxValue = match1;
  }
})
console.log(maxLength,maxValue);//18 "f" 
系统转义
  alert()和console.log()里面的字符是系统转义字符