正则
正则表达式的使用
创建正则表达式有两种方式 :
1, 使用new
var box = new RegExp("box");
console.log(box);
console.log(typeof box);
var box = new RegExp("box", "gi");
console.log(box);
2, 采用字面量方式
var box = /box/;
console.log(box);
console.log(typeof box);
var box = /box/gi;
console.log(box);
注意: 其中g表示全局匹配, i表示忽略大小写
使用正则表达式匹配字符串有两种方式:
1, test() : 返回true则符合, false则不符合
2, exec() : 返回数组则符合, null则不符合
这两种方法使用正则表达式对象去调用, 参数为要匹配的字符串
var box = /box/gi;
var str = "This is a Box bOX box";
console.log(box.test(str));
console.log(/box/gi.test(str));
var box = /box/gi;
var str = "This is a Box boX"
console.log(box.exec(str));
console.log(/box/gi.exec(str));
字符串的正则表达式方法
除了 test()和 exec()方法,String 对象也提供了 4 个使用正则表达式的方法。
var str = "This is a Box box BoX";
var matchArr = str.match(/box/gi);
console.log(matchArr);
var replaceStr = str.replace(/box/gi, "xxx");
console.log(replaceStr);
var searchIndex = str.search(/box/i);
console.log(searchIndex);
var splitArr = str.split(/b/i);
console.log(splitArr.length);
元字符
1 .任意字符,一个点.表示一个字符
var reg = /g..gle/
var str = 'gadgle'
console.log(reg.test(str))
2. * 次数,0或者多次
3. .* 任意字符可以出现任意次数
var reg = /g.*gle/
var str = "gfqjwefjwjf233%^&*hjgle"
console.log(reg.test(str))
4. [ ] : 表示字符可以出现的范围,一个中括号是一个字符
var reg = /g[a-z]gle/
var str = "gagle"
console.log(reg.test(str))
5.[abc] a或者b 或者c
var reg = /g[abc]gle/
var str = 'gbgle'
console.log(reg.test(str))
6.[^a-z] 在括号内部出现^取反,不是a-z
var reg = /g[^a-z]gle/
console.log(reg.test("g gle"))
7. [a-z]*
var reg = /g[a-z]*gle/
var str = "google"
console.log(reg.test(str))
8. + 至少1次
var reg = /g[a-z]+gle/
console.log(reg.test("gooooogle"))
9. ? 0次或者1次
var reg = /g[a-z]?gle/
console.log(reg.test("gogle"))
console.log(reg.test("ggle"))
1.0 \w [a-zA-Z0-9_]
// \w*
// \w+
// \w?
var reg = /g\w+gle/
console.log(reg.test("goagle"))
11. \W [^a-zA-Z0-9_]
var reg = /g\W+gle/
console.log(reg.test("g!
12. \d [0-9]
var reg = /g\d+gle/
console.log(reg.test("g123gle"))
13. \D [^0-9]
var reg = /g\D+gle/
console.log(reg.test("g_!gle"))
14. \s 空白
var reg = /g\s+gle/
console.log(reg.test("g gle"))
15. \S 非空白
var reg = /g\S+gle/
console.log(reg.test("g123gle"))
16. {n} 固定n次
var reg = /g[a-z]{2}gle/
console.log(reg.test("gaagle"))
17. {n,m} 最少n次,最多m次
var reg = /g[a-z]{2,5}gle/
console.log(reg.test("gabcacgle"))
18. {n,} 最少n次,最多不限
var reg = /g[a-z]{2,}gle/
console.log(reg.test("gabsadasdadsdasgle"))
19. /^ 匹配开始,从头开始匹配
var reg = /^google/
console.log(reg.test("google"))
20. $/ 匹配结尾,从结尾开始匹配
var reg = /google$/
console.log(reg.test("123google"))
21.()组
var reg = /^(google)+$/
console.log(reg.test("googlegoogle"))
22. 使用或模式匹配: | ||
// | 代表或者的意思, 匹配其中一种字符串
var pattern = /google|baidu|bing/
var str = "googl2e bai3du;bingl"
console.log(pattern.test(str))
23. 分组模式匹配: ()
// ()加上小括号, 将内容进行分组, 可以作为一个整体进行多次匹配
var pattern = /(google){4,8}/
var str = "googlegooglegooglegoogle"
console.log(pattern.test(str))
24. 获取8..8之间的任意字符
var pattern = /8(.*)8/
var str = "this is 8google8 baab 8ggg8"
console.log(str.match(pattern))
console.log(RegExp.$1)
console.log(RegExp.$2)
var reg = /^([a-z]+)\s([0-9]{4})$/i
var str = "abc 1122"
console.log(reg.test(str))
console.log(RegExp.$1)
console.log(RegExp.$2)
25. 以字母开头,至少一个, 忽略大小写
var reg = /^[a-z]+/i
// 以字母开头,
// 至少有一个字母,有一个空格,
// 和4个数字,并以数字结尾,忽略大小写
var reg = /^[a-z]+\s\d{4}$/i
var reg = /^[a-z]+\s[0-9]{4}$/i
26. 捕获性分组
var pattern = /(\d+)([a-z])/
var str = "123abc"
console.log(pattern.exec(str))
27. 非捕获性分组 ?:
var pattern = /(?:\d+)(?:[a-z])/
var str = "123abc"
console.log(pattern.exec(str))
var str = ".[/b]"
var reg = /\.\[\/b\]/
console.log(reg.test(str))
28. m 换行
var reg = /^\d/gm
var str = "1,baidu\n2,google\n3,bing"
console.log(str.replace(reg, "
29. 邮政编码(共6位数字, 第一位不能为0)
var reg = /^[1-9]\d{5}$/
console.log(reg.test(123456))
30. 电子邮件(xxxx@xxx(.xxx)+)
// luozan@sina.com
var reg = /\w+@\w+\.\w+/ig
// luozan@sina.com
// luo.zan@sina.com
// luo.zan@sina.com.cn
// luo.zan.shuai@sina.com.cn
console.log("-------------")
var reg = /\w+(\.\w+)*@\w+(\.\w+)+/i
console.log(reg.test("luozan@sina.com"))
console.log(reg.test("luo.zan@sina.com"))
console.log(reg.test("luo.zan@sina.com.cn "))
console.log(reg.test("luo.zan.shuai@sina.com.cn "))
31. 手机号(13或14或15或18开头的11位数字)
// 13 14 15 16 17 18 19
// var reg=/^[1][3-9]\d{9}$/
var reg = /^[1][3458]\d{9}$/
32. 用户名(只能使用数字字母下划线,
//且数字不能开头, 长度在6-15位)
var reg = /^[a-z_]\w{5,14}$/i
33. 删除多余空格
var str = " zhang san"
console.log(str.replace(/\s+/g, ""))
34. trim()
var str = " zhang san "
var str1 = str.replace(/^\s+/, "").replace(/\s+$/, "")
console.log(str1)
35. 身份证 120
var reg = /[1-9]\d{16}[\dX]/
36. 简单日期格式 99 31 99
var reg = /^\d{4}-\d{2}-\d{2}$/
37. 图片文件格式 .jpg .png .jpeg .gif
var reg = /\.(jpg|png|jpeg|gif)$/