<!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方法的使用
// var reg = /\s\*/g;
// var str = "This *is *a *test *string";
// var resultString = str.replace(reg,"--");//用‘--’ 代替str字符串中的‘ *’
// document.writeln(resultString); //This--is--a--test--string
转载于:https://blog.51cto.com/hanchaohan/1251007