<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>JS正则表达式学习</title> <script type="text/javascript"> (function(){ /* RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 1:直接量语法 /pattern/attributes 2:建立 RegExp 对象的语法:new RegExp(pattern, attributes); 3:参数 (1)参数 pattern 是一个字符串,指定了正则表达式的模式或其余正则表达式。 (2)参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m", 分别用于指定全局匹配、区分大小写的匹配和多行匹配。 ECMAScript 标准化以前,不支持 m 属性。 ★若是 pattern 是正则表达式,而不是字符串,则必须省略该参数。★ 4:返回值 一个新的 RegExp 对象,具备指定的模式和标志。 若是参数 pattern 是正则表达式而不是字符串, 那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志建立一个新的 RegExp 对象。 若是不用 new 运算符,而将 RegExp() 做为函数调用, 那么它的行为与用 new 运算符调用时同样, 只是当 pattern 是正则表达式时,它只返回 pattern,而再也不建立一个新的 RegExp 对象。 5:抛出 (1)SyntaxError - 若是 pattern 不是合法的正则表达式, 或 attributes 含有 "g"、"i" 和 "m" 以外的字符,抛出该异常。 (2)TypeError - 若是 pattern 是 RegExp 对象, 但没有省略 attributes 参数,抛出该异常。 6.说明: ★ 因为咱们用new RegExp()对象时,有些字符串须要转义,因此通常咱们用“直接量语法” eg: var reg = /\d+/; var reg = new RegExp("\\d+"); //须要转义比较麻烦 */ /* ★1.test()方法:test() 方法用于检测一个字符串是否匹配某个模式. 语法:RegExpObject.test(string) 若是字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,不然返回 false。 eg: var reg = /\d+/; //表示必须含有数字 var value1 = "123"; var value2 = "abc"; var v3 = "a2c"; alert(reg.test(value1)); //true alert(reg.test(value2)); //false alert(reg.test(v3)); //true */ /* 2.^n : ^n 量词匹配任何开头为 n 的字符串。 eg: var reg = /^\d+/; //表示任何开头必须为数字 var v1 = "123abc"; var v2 = "abc123"; alert(reg.test(v1)); //true alert(reg.test(v2)); //false */ /* 3.n$: n$ 量词匹配任何结尾为 n 的字符串。 eg: var reg = /\d+$/; //表示结尾必须为数字 var v1 = "abc123"; var v2 = "123abc"; alert(reg.test(v1)); //true alert(reg.test(v2)); //false */ /* 4.综合2,3 var reg = /^\d+$/; //表示必须都是数字 var v1 = "abc123"; var v2 = "123abc"; var v3 = "123"; alert(reg.test(v1)); //false alert(reg.test(v2)); //false alert(reg.test(v3)); //true //★综上所述:JS中的正则,通常咱们以这种格式:var reg = /^xxxxxx$/; //^表明开始,$表明结束 */ /* 5.String对象的match()方法: (1)match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 该方法相似 indexOf() 和 lastIndexOf(),可是它返回指定的值,而不是字符串的位置。 (2)语法 :★ stringObject.match(searchvalue) stringObject.match(regexp) (3)参数 描述 searchvalue 必需。规定要检索的字符串值。 regexp 必需。规定要匹配的模式的 RegExp 对象。 若是该参数不是 RegExp 对象, 则须要首先把它传递给 RegExp 构造函数, 将其转换为 RegExp 对象。 (4)返回值 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具备全局标志 g。 (5)说明: 若是 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。 若是没有找到任何匹配的文本, match() 将返回 null eg: var str = "1 plus 2 equals 3"; var str1 = "a plus b equals ab"; var result = str.match(/\d+/g); //使用全局匹配的正则表达式来检索字符串中的全部数字 var result1 = str.match(/\d+/); //检测到第一个数字就中止检测了,并返回第一个数字 var result2 = str1.match(/\d+/); // str1中没有数字,将返回null alert(result); //1,2,3 数组 alert(result1); // 1 alert(result2); // null var str3 = "Hello , World, World is not mine"; var r1 = str3.match("world"); //字符串中没有world返回null var r2 = str3.match("World"); //非全局匹配 var r3 = str3.match(/World/g); //全局匹配 var r4 = str3.match(/World/); var r5 = str3.match(/world/gi); //全局匹配,而且不区分大小写 alert(r1); //null alert(r2); //World alert(r3); //World,World 数组 alert(r4); //World ,只匹配到第一个 alert(r5); //World,World 数组 ,忽略大小写 var str4 = "@Jerry @Tom @Alex Hello" ; var re1 = str4.match(/@\w+\s/gim); //匹配以@开头,以空格结尾,中间为字符的 alert(re1); //@Jerry ,@Tom ,@Alex 数组 */ /* 6.方括号 (1):[abc] 查找方括号之间的任何字符。 eg: var str = "I love a ,but I like b, c is my wife"; var r1 = str.match(/[abc]/g); //在字符串中对字符范围 abc 进行全局搜索 alert(r1); // a,b,b,c 数组 var r2 = str.match(/[a-h]/g); //在字符串中对字符范围 [a-h] 进行全局搜索 alert(r2); // e,a,b,e,b,c,f,e */ /* (2):[^abc] 查找任何不在方括号之间的字符。 eg: var str = "Is this all there is?"; var r1 = str.match(/[^a-h]/g); //对不在字符范围 [a-h] 内的字符进行全局搜索 alert(r1); //I,s, ,t,i,s, ,l,l, ,t,r, ,i,s,? */ /* (3): [0-9] 查找任何从 0 至 9 的数字。 [a-z] 查找任何从小写 a 到小写 z 的字符。 [A-Z] 查找任何从大写 A 到大写 Z 的字符。 [A-z] 查找任何从大写 A 到小写 z 的字符。 [adgk] 查找给定集合内的任何字符。 [^adgk] 查找给定集合外的任何字符。 (red|blue|green) 查找任何指定的选项。 var str = "Hello,Tom"; var str1 = "Hello,Jerry"; var str2 = "Hello,Jakc"; var reg = /^Hello,(Tom|Alex|Jerry)$/; //含有Tom 或者 Alex, 或者 Jerry 结尾 alert(reg.test(str)); //true alert(reg.test(str1)); //true alert(reg.test(str2)); //false */ /* 7.★:元字符 (1):. 查找单个字符,除了换行和行结束符。 eg: var str = "That's hot!"; alert(str.match(/h.t/g)); // hat,hot 数组 */ /* (2):\w 元字符用于查找单词字符。表示必须是字母字符 单词字符包括:a-z、A-Z、0-9,以及下划线。 eg: var str = "Hello World ,1999 !!"; alert(str.match(/\w/g)); //H,e,l,l,o,W,o,r,l,d,1,9,9,9 数组 */ /* (3):\W 元字符用于查找非单词字符。 单词字符包括:a-z、A-Z、0-9,以及下划线。 var str = "Hello World ,1999 !!"; alert(str.match(/\W/g)); // , ,,, ,!,! 数组 */ /* (4):\d 查找数字。 var str = "Hello World ,1999 !!"; alert(str.match(/\d/g)); // 1,9,9,9 数组 */ /* (5):\D 查找非数字字符。 var str = "Hello World ,1999 !!"; alert(str.match(/\D/g)); //H,e,l,l,o, ,W,o,r,l,d, ,,, ,!,! 数组 */ /* (6):\s 查找空白字符。 var str = "Hello World ,1999 !!"; alert(str.match(/\s/g)); // , , 数组 */ /* (7):\S 查找非空白字符。 var str = "Hello World ,1999 !!"; alert(str.match(/\S/g)); //H,e,l,l,o,W,o,r,l,d,,,1,9,9,9,!,! 数组 */ /* (8):\b 元字符匹配单词边界。 在单词边界匹配的位置,单词字符后面或前面不与另外一个单词字符直接相邻。 请注意,匹配的单词边界并不包含在匹配中。 换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。) 若是未找到匹配,则返回 null。 提示:\b 元字符一般用于查找位于单词的开头或结尾的匹配。 例子: /\bm/ 匹配 "moon" 中的 'm'; /oo\b/ 不匹配 "moon" 中的 'oo',由于 'oo' 后面的 'n' 是一个单词字符; /oon\b/ 匹配 "moon" 中的 'oon',由于 'oon' 位于字符串的末端,后面没有单词字符; /\w\b\w/ 不匹配任何字符,由于单词字符以后毫不会同时紧跟着非单词字符和单词字符。 var str = "Hello World ,1999 !!"; var str1 = "HelloWorld ,1999 !!"; alert(str.match(/\bWo/g)); //Wo alert(str1.match(/\bWo/g)); //null */ /* 8.★ 量词 n+ 匹配任何包含至少一个 n 的字符串。 n* 匹配任何包含零个或多个 n 的字符串。 n? 匹配任何包含零个或一个 n 的字符串。 n{X} 匹配包含 X 个 n 的序列的字符串。 n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。 n{X,} 匹配包含至少 X 个 n 的序列的字符串。 n$ 匹配任何结尾为 n 的字符串。 ^n 匹配任何开头为 n 的字符串。 ?=n 匹配任何其后紧接指定字符串 n 的字符串。 ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。 */ /* (1):n+ 匹配任何包含至少一个 n 的字符串。 n* 匹配任何包含零个或多个 n 的字符串。 n? 匹配任何包含零个或一个 n 的字符串。 var str = "Hello Weiyuan2013! I love you "; var reg = /\d+/g; //至少包含一个数字 var reg1 = /l+/g; //结尾至少包含字母l var reg2 = /lo?/g; //表示l含有0个或1个o alert(reg.test(str)); //true alert(reg1.test(str)); //true alert(reg2.test(str)); //true */ /* (4): ①n{X} 匹配包含 X 个 n 的序列的字符串。 用法:n{X,} 量词匹配包含 X 个 n 的序列的字符串。 ②n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。 用法: n{X,Y} 量词匹配包含 X 或 Y 个 n 的序列的字符串。 X 和 Y 必须是数字。而且X < Y ③n{X,} 匹配包含至少 X 个 n 的序列的字符串。 n{X,} 量词匹配包含至少 X 个 n 的序列的字符串。 X 必须是数字。 var str = "13523877794"; var reg = /7{3}/g; //匹配含有3个7 var reg1 = /7{4}/g; //匹配含有4个7 var reg2 = /7{3,4}/g; // 匹配含有3个7 或者4 个7 var reg3 = /7{2,}/g; //至少含有2个7 ,能够含有3个7或者4个。。。。。 alert(reg.test(str)); //true alert(reg1.test(str)); //false alert(reg2.test(str)); // true alert(reg3.test(str)); //true */ /* (5) ①?=n 匹配任何其后紧接指定字符串 n 的字符串。 说明:?=n 量词匹配任何其后紧接指定字符串 n 的字符串 ②?!n 匹配任何其后没有紧接指定字符串 n 的字符串。 var str="Is this all there is"; alert(str.match(/is(?= all)/g)); //对其后紧跟 "all" 的 "is" 进行全局搜索: alert(str.match(/is(?! all)/gi)); //对其后没有紧跟 "all" 的 "is" 进行全局搜索: */ //先这样多吧 ---下面看些具体的例子 /* 1.注册用户名验证:要求:字母数字的组合 var paramReg = /^[0-9a-zA-Z]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)[0-9a-zA-Z]*$/; var username = "12hanchao2013"; alert(paramReg.test(username)); */ /* 2.对Email的验证: var emailReg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; var email = "windhan_20_06@163.com"; alert(emailReg.test(email)); */ /* 3.对电话号码的验证 //var regPhone = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/; var regPhone = /^(([0+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/; var phone = "4008-007-007";//"0427-7531992"; //"021-60825088";//"76423865"; var result = regPhone.test(phone); alert(result); */ /* 4.验证手机号码: var regMobile = /^1[3|4|5|6|7|8|9][0-9]{1}[0-9]{8}$/; var mobile = "13877794164"; var result = regMobile.test(mobile); alert(result); */ /* 5.验证扣扣号: var regQQ =/^[1-9]\d{4,8}$/; var qq = "294851313"; var result = regQQ.test(qq); alert(result); */ /* 6.验证MSN: var regMsn = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; var msn = "12345@liehuo.net"; var result = regMsn.test(msn); alert(result); */ /* 7.验证网址: //var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/; var regNet = /^http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/; var url = "http://game.baidu.com"; var result = regNet.test(url); alert(result); */ /* 8.验证IP: var checkIp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; var ip = "192.168.25.103"; var result = checkIp.test(ip); alert(result); */ })(); </script> </head> <body> </body> </html>
//replace方法的使用javascript
// var reg = /\s\*/g;html
// var str = "This *is *a *test *string";java
// var resultString = str.replace(reg,"--");//用‘--’ 代替str字符串中的‘ *’正则表达式
// document.writeln(resultString); //This--is--a--test--string数组
学习参考博客:http://blog.jobbole.com/63398/ide