正则就是对字符串进行处理,过滤筛选出我们需要的指定的字符串,这样增加了用户体验也减轻了服务器 的负担。(创建一个正则就想象成创建一个关键词,这个关键词去匹配一串字符串) 创建正则方法一: var box=new RegExp('这里写要匹配的关键词','ig'); (第一个参数必选且必须是字符串,第二个可选修饰符) i //忽略大小写 g //匹配全局,例如一行有很多关键词找到了其中一个关键词继续往后面找。 m //多行匹配 创建正则方法二(推荐): var box=/这里写要匹配的关键词/ig ---------------------------- RegExp内置2个测试方法: test() exec() test() //匹配字符串 返回的是布尔值 var box=new RegExp('Box','i'); //i 不区分大小写 var str='box'; alert(box.test(str)); //true 可以一句话写完 alert(/Box/i.test('box')); 简单的了解正则的作用 var box =new RegExp('Box','i'); var str='this is box'; alert(box.test(str)); //检查这段字符串中是否含有 模式中的正则。 exec() //匹配字符串 返回数组 var box =new RegExp('Box','i'); var str='this is box'; alert(box.exec(str)); //将能匹配成功的关键词组合成数组返回 没有就返回null --------------------------------- String对象提供4个方法,可以使用在正则中 match() // 将匹配到的字符串 组合成 数组 replace() //替换字符串 search() //返回第一个匹配到的位置 索引从0开始,找不到返回-1。此方法默认忽略g split() //此方法默认忽略g match()例子 var box = new RegExp('Box','ig'); //这里要开启全局 不然只能匹配到第一个字符串就退出了 var str ='this is Box,that is box'; alert(str.match(box)); //返回一个数组 box,box replace()例子 alert(str.replace(box,'tom')); // this is tom,that is tom search()例子 alert(str.search(box)); //7 正则无需开启全局模式,只找到第一个关键词就退出 split()例子 var box = new RegExp(',','ig'); var str ='this is Box,that is box'; alert(str.split(box)); //通过 ,将字符串拆分成数组 此方法默认忽略g模式 RegExp对象的静态属性 var box=/google/i; var str='this is a google!'; box.test(str); //*必须要执行一下,静态属性才有校(才能用以下方法) alert(RegExp.input); // this is a google! 获取要匹配的那段字符串 Opera不支持 //alert(RegExp.leftContext); // this is a 获取关键词的左边内容 //alert(RegExp.rightContext); // ! 获取关键词的右边内容 //alert(RegExp.lastMatch); //在匹配全局模式下 获取到最后一个关键词 Opera不支持 //alert(RegExp.lastParen); Opera不支持 //alert(RegExp.multiline); IE不支持 RegExp对象实例属性 (功能没什么用) ---------------------------------------------------- 以下开始就是重点了 获取控制 .点 // 可以匹配任意字符串,一个点代表匹配任意一位,多个点多位 var box=/g.ogle/; var str='g2ogle'; //这里的2可以换成任意一个字符 alert(box.test(str)); //true * // 可以匹配 0个 1个 或者 多个 var box=/go*ogle/; //*的前面是o ,就对前面的o起作用 var str='gogle'; //0个情况下 var str='google'; //1个情况下 var str='gooooooogle'; //多个情况下 var str='gbbogle'; //这样是匹配不到的,*的前面是o只能到匹配o的数量 + // 至少1个 或者 多个 不能匹配0个 ? // 0个 或者 1个 可以组合使用例如 var box=/g.?ogle/; // 在.?位置上可以放0个 或者任意一个字符串 {} // 重复匹配指定的范围 var box=/go{2,4}gle/; // o的数量只能是 2个到4个之间 可以是2个或者4个 var box=/go{3}gle/; //只能3个o var box=/go{3,}gle/; //至少3个o [] [a-z] // 任意匹配一位是26个字母中的其中一个 ,默认是区分大小写的如果不想就开启i var box=/[a-z]oogle/; //26个字母任意匹配一个 var box=/[0-9]oogle/; //匹配0到9一个数字 注意一个例子: var box=/[0-9]oogle/; var str='444444444oogle'; //*这里也一样匹配成功因为匹配的是后面6位,不管是后6位还是前6位正则自动去寻找能匹配成功的一段字符串中的某一小段 alert(box.test(str)); //true [a-zA-Z0-9_] 复合 //可以匹配到a-z或者A-Z或者0-9或者_ 任意一个字符 ^ // 非 var box=/[^0-9]oogle/; //非 0到9的 任意一个字符,也就是任意一个字符都行只要不是0到9 ^ //强制从头开始一个个字符对应的去匹配 var box=/^[0-9]oogle/; var str='444444444oogle'; alert(box.test(str)); //false 这里就从头开始匹配了 一个个字符一一对应,而不是去匹配4oogle $ //强制从字符串后面开始匹配 var box=/google$/; var str='fadf3w3fsdfgoogle'; //关键词从后面开始匹配,参考上面一个例子就能理解。 插入一个例子: var box + // 匹配 一个 或者 多个 var box = /[a-z0-9]+/; var str='fa8sd9f8s09df8sd90f'; // true 只要是数字和字母组合成的都能匹配成功 \w // [a-zA-Z0-9_] var box =/\woogle/; //意思就是在\w的位置上只能是a-z或者A-Z或者0-9任意一位。 \W // [^a-zA-Z0-9_] \d // [0-9] \D // [^0-9] \s // 匹配一个空格 \S // 匹配 只要不是空格 的 任意一个字符 var box =/goog\sle/; // \s 可以 对应上字符串的空格 var str='goog le'; alert(box.test(str)); \b // 是否 边界 var box =/google\b/; // 检查字符串中的google是否在字符串的末尾(测试google必须在末尾才能匹配成功) var str='oogledfsdfegoogle'; | // 或 匹配模式 (推荐在使用|的时候请让()包括起来,不然会出现很多奇怪的错误) var box =/(google|baidu|bing)/; // 字符串中包含有3个其中一个 即可匹配 var str='this is google'; () // 分组 var box =/(google){4,8}/; // 意思是google这个关键词必须有4到8个之间,包含4和8 var str='googlegooglegooglegoogle'; var str='googlegooglegooglegooglegooglegooglegooglegoogle'; $1 $2 // 获取到匹配的 内容 var box =/8(.*)8/; //意思就是在(.*)位置上可以是任意的0个或者1个或者是多个字符 var str='this is a 8google8'; box.test(str); //必须要执行一下 exec()也可以 alert(RegExp.$1); //获取到匹配的内容 (.*) 对应匹配到的内容是 google,这里注意必须要加上()才有效果。 $1的作用举一个例子: var box=/8(.*)8/; var str='this is a 8google8' document.write(str.replace(box,'$1')); //这里的效果自己尝试的去改8和8之间的字符串就知道了 var box=/8(.*)8(.*)/; $1 代表 第一个(.*) $2 代表 第二个(.*) 贪婪(什么都是我的) 惰性(节制一点) 上图告诉我们什么符号拥有贪婪属性 例子: var box=/[a-z]/; var str='adsfsdf'; alert(str.replace(box,'1')); // 1dsfsdf var box=/[a-z]+/; // 贪婪 模式 var str='adsfsdf'; alert(str.replace(box,'1')); // 1 var box=/[a-z]+?/; // 惰性 模式 var str='adsfsdf'; alert(str.replace(box,'1')); // 1dsfsdf var box=/[a-z]+?/g; // 惰性 模式 开启全局 var str='adsfsdf'; alert(str.replace(box,'1')); // 1111111 贪婪与惰性经典例子 var box=/8(.*)8/; var str ='8google8 8google8 8google8'; //正则匹配到的是对应字符串第一个8和最后一个8,(.*) 匹配到的是google8 8google8 8google alert(str.replace(box,'$1')); //结果是 google8 8google8 8google var box=/8(.*?)8/g; var str ='8google8 8google8 8google8'; alert(str.replace(box,'$1')); //结果是 google google google /*使用exec返回数组*/ 例子1: var pattern = /^[a-z]+\s[0-9]{4}$/; //意思就是从头开始匹配的同时又要兼顾从尾部开始匹配,其中可以匹配到a到z其中一个或者多个直到遇见空格继续匹配0到9任意4个数字 var str = 'google 2012'; alert(pattern.exec(str)); // google 2012 例子2: var pattern = /^([a-z]+)\s([0-9]{4})$/; var str = 'google 2012'; alert(pattern.exec(str)); // google 2012,google,2012 跟之前相比多了google,2012那是有分组符号([a-z]+) ([0-9]{4}) 例子3: var pattern = /(\d+)([a-z])/; //这个叫做捕获性分组,所有的分组都捕获返回 var str = '123abc'; var a = pattern.exec(str); // 123a,123,a 先匹配整体123a,在匹配(\d+)也就是123,其次就是([a-z])就是a //a[0]返回123a //a[1]返回123 //a[2]返回a 例子4: var pattern = /(\d+)(?:[a-z])/; //非捕获性分组,只要在不需要捕获返回的分组加上?: var str = '123abc'; alert(pattern.exec(str)); // 123a,123 例子5:(容易混乱不推荐用) var pattern = /(a?(b?(c?)))/; //嵌套分组,从外往内获取 var str = 'abc'; alert(pattern.exec(str)); //第一步:a[0],整个匹配到的字符串abc //第二步:a[1],匹配第一个分组(a?(b?(c?))), abc //第三步:a[2],匹配第二个分组(b?(c?), bc //第三步:a[3],匹配第三个分组(c?), c 例子6: ?= 的用法 var pattern = /goo/; var str = 'google'; alert(pattern.exec(str)); //返回的是goo var pattern = /goo/; var str = 'goobbb'; alert(pattern.exec(str)); //返回的也是goo 但是我们需要规定返回的goo的后面必须gle才能返回goo var pattern = /goo(?=gle)/; //goo关键词后面必须是gle var str = 'google'; //这里goo能匹配对上了,但是后面必须紧接的是gle alert(pattern.exec(str)); //goo 如果把google改成goofff或者其他的就不能匹配了 与子相反有 ?! 用法直接例子 var box=/Windows(?!95|98|NT|2000)/ig; var str='WindowsNt'; // 意思就是字符串 Windows 后面可以什么都不加,就算加,紧接的不能是Windows95 Windows98 WindowsNT Windows2000,其他的都行。 alert( box.exec(str) ); 例子7: var pattern = /\[/; //用\符号来转义正则里的特殊字符,才能匹配 var str = '['; alert(pattern.test(str)); 例子8: m模式的例子 var pattern = /^\d+/gm; //限定了首匹配,并且开启换行模式 var str = '1.baidu\n2.google\n3.bing'; //这里的字符串加了\n换行,如果正则不开启换行模式m,就不能匹配到的即使是开启了g模式 alert(str.replace(pattern, '#')); 常用正则实例讲解 var pattern = /[1-9][0-9]{5}/; //共6 位数字,第一位不能为0 var str = '224000'; alert(pattern.test(str)); var pattern = /[\w]+\.(zip|rar|gz)/; //\d\w_表示所有数字和字母加下划线 var str = '123.zip'; //\.表示匹配.,后面是一个选择 alert(pattern.test(str)); var pattern = /\s/g; //g 必须全局,才能全部匹配 var str = '111 222 333'; var result = str.replace(pattern,''); //把空格匹配成无空格 alert(result); var pattern = /^\s+/; //强制首 var str = ' goo gle '; var result = str.replace(pattern, ''); pattern = /\s+$/; //强制尾 result = result.replace(pattern, ''); alert('|' + result + '|'); var pattern = /^\s*(.+?)\s*$/; //使用了非贪婪捕获 var str = ' google '; alert('|' + pattern.exec(str)[1] + '|'); var pattern = /^\s*(.+?)\s*$/; var str = ' google '; alert('|' + str.replace(pattern, '$1') + '|'); //使用了分组获取 var pattern = /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/; var str = 'yc60.com@gmail.com'; alert(pattern.test(str)); var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/; var str = 'yc60.com@gmail.com'; alert(pattern.test(str)); 这个需要经常使用才能够灵活运用 RegExp("(^|\\s+)" + 样式名称 + "(\\s+|$)","g");