JavaScript 正则表达式
一、概念:
什么是正则表达式?它出现的意义何在?
1、打个比喻。 现在的女人找未来老公的标准:“多金,不花心,爱自己,无不良嗜好,帅”,相亲的时候她就开始把眼前的人的各项指标进行匹配,最终打分。
正则表达式就是: 一个待匹配的模版,等同于上边的标准
2、存在的意义呢? 例如:我们在上网的时候输入用户名,密码都有一定的规则(字母开头,长度多少);身份证有效性验证,邮箱有效性验证,这些在存入数据库之前都会进行有效性验证的,那么它靠什么验证呢?
就是一个模版,一个标准,一个正则表达式。 有人就说了这个用String 对象就可以了,indexof,substr 等函数,是的可以的,但是实现起来非常复杂,所以开发了RegExp 对象 —— 正则表达式 对象
二、基本语法
new RegExp(pattern, attributes);
说明:
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
2.1 常用方法:
1、compile() 编译正则表达式对象,常用于改变表达式。
<script type="text/javascript"> var str="Every man in the world! Every woman on earth!"; patt=/man/g; str2=str.replace(patt,"person"); document.write(str2+"<br />"); patt=/(wo)?man/g; patt.compile(patt); str2=str.replace(patt,"person"); document.write(str2); </script>
2、exec() 方法用于检索字符串中的正则表达式的匹配。
1 <script type="text/javascript"> 2 3 var str = "Visit W3School"; 4 var patt = new RegExp("W3School","g"); 5 var result; 6 7 while ((result = patt.exec(str)) != null) { 8 document.write(result); 9 document.write("<br />"); 10 document.write(patt.lastIndex); 11 } 12 </script>
Result:
W3School
14
3、test() :方法用于检测一个字符串是否匹配某个模式。返回:true,false
2.2、模式中用的元字符
建议查询w3c: http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
三、实战举例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js-正则表达式28个列子</title> </head> <body> <script> // 1、从字符串中提取最后两个字符 3SFASDF92 取出92 // var str = "3SFASDF92"; // var reg = /\d+$/g; //默认就是正则表达式 // var result = reg.exec(str); // alert(result); // 2、去除多余空格:蓝 色 理 想 变成:蓝 色 理 想 // var str = "蓝 色 理 想"; // var patt = /\s+/g; // var regexp = new RegExp(patt); // var result = str.replace(regexp," "); // alert(result); // 3、判断一个字符串是否由数字全部组成 // function isDigit(str) { // var patt = /^\d*$/g; // return patt.test(str); // } // var str = "4654657984"; // alert(isDigit(str)); // 4、匹配电话号码 // var patt = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/g // var str = "0755-83897476"; // alert(patt.test(str)); // 5、是否是手机号码 仅支持13,15 网段的手机号码 // function isTelNum(str) { // var patt = /^0?(13|15)\d{9}$/g; //注意这里是() 不是[] // return patt.test(str); // } // var tel = "13926592220"; // var tel2 = "15019228061"; // alert(isTelNum(tel2)); // 6、取消字符串两边的空格,trim ltrim rtrim 功能 // function trim(str) { // return str.replace(/^\s+|\s+$/g,''); // } // var str = " fdsafs adfasdf " // var result = trim(str); // document.write(str+"<br>"); // document.write(str.length+"<br>"); // document.write(result+"<br>"); // document.write(result.length+"<br>"); // 7.对于输入框的限制 // 7.1 只能输入精确到两位的小数或者整数 // function validDigit(str) { // var patt = /^\d*\.?\d{0,2}$/g;//小数点等特殊字符要加\转义 // return patt.test(str); // } // var str = ".1" // alert(validDigit(str)); // 7.2 包含字母,/ \ : . 字符一次或者多次 // var patt = /[a-z\.\/\\:]+/; // 8. 替换小数点前边的内容 :infomarket.php?id=197 替换为test.php?id=197 // var str = "infomarket.php?id=197"; // var patt = /^\w*/; // alert(str.replace(patt,"test")); // 9.所有的中文替换掉。 中文范围:/[\u4E00-\u9FA5\uf900-\ufa2d]/ // var patt = /[\u4E00-\u9FA5\uf900-\ufa2d]/g; // var text = "我是中国人HelloWorld,dfasd"; // alert(text.replace(patt,"")); // 9.匹配ip 地址 192.168.118.101,192.168.118.72, 192.168.118.1都替换成:192.168.118 // var str = "192.168.118.1"; // var patt = /\.\d+$/g // alert(str.replace(patt,"")); // var str ="<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>"; // var patt = /<ul>[\s|\S]+?<\/ul>/i; // +? 启用非贪婪模式 // console.log(patt.exec(str)); //exec 执行成功后返回的是一个数组 // 10.返回文件名,去掉路径 // function getFileName(str){ // var reg = /[^\\\/]*[\\\/]+/g; // str = str.replace(reg,''); // return str; // } // var str = "c:\\images\\tupian\\006.jpg"; // document.write(getFileName(str)+'<br />'); // var str2 = "c:/images/tupian/test2.jpg"; // document.write(getFileName(str2)); // 10. 绝对路径改相对路径 // var str = '<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">'; // var reg = /http:\/\/[^\/]+/; // str = str.replace(reg,""); // alert(str) // 11.用户名有效性 // function isEmail(str){ // var reg = /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/; // return reg.test(str); // } // var str = '超级无敌用户名regExp'; // var str2 = '捣乱的@'; // var str3 = '太短' // var str4 = '太长longlonglonglonglonglonglonglong' // document.write(isEmail(str)+'<br />'); // document.write(isEmail(str2)+'<br />'); // document.write(isEmail(str3)+'<br />'); // document.write(isEmail(str4)+'<br />'); // 12.还是有效性验证 // function testReg(reg,str){ // return reg.test(str); // } // var reg = /^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/; // var str = 'No.8,ChangAn Street,BeiJing,China'; // var str2 = '8.No,ChangAn Street,BeiJing,China'; // var str3 = 'No.8,ChangAn Street,BeiJing,China88'; // document.write(testReg(reg,str)+'<br />') // document.write(testReg(reg,str2)+'<br />') // document.write(testReg(reg,str3)+'<br />') // 13.价格匹配 // 开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。hansir给出的对应正则: // /^(\d*\.\d{0,2}|\d+).*$/ // 14. 开头是14位或者17位数字,结尾可以是数字或者是x或者是X。 // /^(\d{14}|\d{17})(\d|[xX])$/ // 15. 单词首字母大写 // function replaceReg(reg,str){ // str = str.toLowerCase(); // return str.replace(reg,function(x){return x.toUpperCase()})//replace 高级用法 // } // var reg = /\b(\w)|\s(\w)/g; // var str = 'blue idea'; // var str2 = 'BLUE IDEA'; // var str3 = 'Test \n str is no good!'; // var str4 = 'final test'; // document.write(replaceReg(reg,str)+'<br />'); // document.write(replaceReg(reg,str2)+'<br />'); // document.write(replaceReg(reg,str3)+'<br />'); // document.write(replaceReg(reg,str4)+'<br />'); // 16.日期验证 yyyy-mm-dd 或 yyyy/mm/dd // /^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/ // 17. 邮箱的有效性验证 // /^[A-Za-z\d]+([-_\.][A-Za-z\d]+)*\+?@(([A-Za-z\d]-?){0,62}[A-Za-z\d]\.)+[A-Za-z\d]{2,5}$/ // function anchorText(str){ // var reg = /<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>([\s\S]*?)<\/a>/; // str = str.replace(reg,'$1'); // return str; // } // 18. 取标签中的内容 // var str = '<a id = "test" href="http://bbs.blueidea.com" title="无敌">经典论坛</a>'; // 匹配a 标签的正则 // var reg = /<a\s(\s*\w*?\s*=\s*".+?")*(\s*href\s*=\s*".+?")(\s*\w*?\s*=\s*".+?")*\s*>([\s\S]*?)<\/a>/; // var arr = str.match(reg); // for (var i = 0; i < arr.length; i++) { // alert(arr[i]); // } //小括号(?:) 表示不捕获 // var reg = /<a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*>([\s\S]*?)<\/a>/; // console.log(str.replace(reg,"$1")); // 19.判断一个标签是否闭合,没有考虑标签嵌套 // var patt = /<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?<\/\1>)+|\s*\/>/i; // var text = "<div>aaaaaa<div>test</div>"; // var arr = text.match(patt); // for (var i = 0; i < arr.length; i++) { // alert(arr[i]); // } // 20.要求匹配指定标签内容,而且指定父标签 // var text = "<channel><title>蓝色理想</title></channel> <item> <title>界面设计测试规范</title> </item> <item> <title>《古典写实美女》漫画教程</title> </item> <item> <title>安远――消失的光年</title> </item> <item> <title>asp.net 2.0多语言网站解决方案</title> </item>"; // var patt = /<title>[^<>]*?<\/title>(?!\s*<\/channel>)/gi; // //这里的(?!)表示不匹配<channel>标签 // var arr = text.match(patt); // for (var i = 0; i < arr.length; i++) { // console.log(arr[i]); // } // 21.匹配由字母数字组合,不能使用\w // function istrue(str){ // var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig; // return reg.test(str); // } // var str = 'AaBc'; // var str2 = 'aaa123'; // var str3 = '123dd'; // var str4 = '1230923403982'; // document.write(istrue(str)+'<br />'); // document.write(istrue(str2)+'<br />'); // document.write(istrue(str3)+'<br />'); // document.write(istrue(str4)+'<br />'); // 22. 变量替换 // var _A = ['A','B','C','D']; // var _B = '<ul><li>$0$</li><li>$1$</li><li>$2$</li><li>$3$</li><li>$4$</li></ul>'; // var patt = /\$\d\$/g; // // 结果:_C = '<ul><li>A</li><li>B</li><li>C</li><li>D</li></ul>'; // var _C = _B.replace(patt,function(x){ // console.log(x); // var index = x.replace(/\$/g,''); // console.log(index); // if(index < _A.length) { // return _A[index]; // }else { // return ""; // } // }); // console.log(_C); // 23. 正则表达式查找替换 // var text = "<td align=\"center\"><img src=\"../photo/ccg/thumbnails/O'Malley's West_jpg.gif\" border=\"0\"onClick=\"MM_openBrWindow('../photo/ccg/pages/O'Malley's West_jpg.htm','BE','width=386,height=306')\"><br> O'Malley's West</td>"; // // 要求将所有onclick属性中的’替换成\’,也就是将单引号转义。 // var patt = /onclick\s*=\s*".+?"/ig // var result = text.replace(patt,function(x){ // return x.replace(/\'/,"\\'"); // }); // console.log(result); // 24. 阿拉伯数字变成中文大写 // var text = "1392569220"; // var arr = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"); // var patt =/\d/g; // var result = text.replace(patt,function(x){ // return arr[x]; // }); // 25. 从HTML代码段删除指定标签极其内容 // /<(script|head|%)[\s\S]*?\/\1>/ig </script> </body> </html>
浙公网安备 33010602011771号