正则表达式
正则表达式(Regular Expression)是一个描述字符模式的对象, 用于对字符串进行匹配, 一般用在有规律的字符串匹配中; 如: 匹配用户名是否正确, 邮箱是否正确等。
正则表达式常用于表单验证, 如在HTML表单中填写的用户名、地址、出生日期, 邮箱等信息, 在表单提交到服务器做进一步处理之前, 我们需要先检查表单中的信息是否符合要求, 做表单验证, 以确认用户确实输入了信息并且这些信息是符合要求的。
创建正则表达式
构造函数创建正则
new RegExp("匹配的内容","修饰符")
修饰符有:igm
i 忽略大小写
g 全局
m 换行
var str="this is a box"
var reg=new RegExp("is","igm")
console.log(reg.test(str));//true
字面量方式创建正则
var str="this is a box"
var reg=/is/igm;
console.log(reg.test(str));//true
正则的方法
test():返回true则符合, false则不符合exec():返回数组则符合, null则不符合
var str="this is a box"
var reg=/box/i;
console.log(typeof reg);//object
console.log(reg.test(str));//true
console.log(reg.exec(str));//['box', index: 10, input: 'this is a box', groups: undefined]
字符串支持正则的方法
match()条件满足返回数组,不满足返回nullreplace()查找并替换, 返回替换后的新字符串search()查找并返回匹配的字符串的起始位置,找不到匹配的则返回-1split()根据指定字符串拆分, 返回拆分后的数组, 否则返回原字符串
var str = "This is a Box box BoX";
//1.
var matchArr = str.match(/box/gi);
console.log(matchArr); //(3) ['Box', 'box', 'BoX']
//2.
var replaceStr = str.replace(/box/gi, "xxx");
console.log(replaceStr);//This is a xxx xxx xxx
//3.
var searchIndex = str.search(/box/i);
console.log(searchIndex);//10
//4.
var splitArr = str.split(/b/i);
console.log(splitArr);//(4) ['This is a ', 'ox ', 'ox ', 'oX']
正则表达式的使用
1. .
.号元字符, 代表除了换行之外的所有单个字符,一个点.匹配一个任意的字符。
var reg = /g.gle/;
console.log(reg.test("gogle"));//true
console.log(reg.test("google"));//false
2. *
*号元字符, 配合其他字符使用, 允许其他字符出现任意多次。重复多次匹配, 可以出现任意次。
var reg = /g.*gle/;
console.log(reg.test("g78uhdf787er837&nhfd///gle"));//true
3. [ ]
[ ]表示字符可以出现的范围,一个中括号是一个字符。
//[a-z]表示匹配一个a-z的字母
var reg = /g[a-z]gle/;
console.log(reg.test("gagle"))//true
console.log(reg.test("gaagle"))//false
//[abc] a或者b或者c
var reg = /g[abc]gle/;
console.log(reg.test("gcgle"));//true
4. ^
^非字符
//[^a-z]不是a-z
var reg = /g[^a-z]gle/;
console.log(reg.test("g1gle"));
console.log(reg.test("gagle"));
5. +
+表示至少出现1次
var reg = /g[a-z]+gle/
console.log(reg.test("goooogle"));//true
console.log(reg.test("ggle"));//false
6. \w
\w等价于[a-zA-Z0-9_]
// \w [a-zA-Z0-9_]
// \w*
// \w+
// \w?
var reg = /g\w+gle/
console.log(reg.test("google"));//true
7. \W
\W取反,等价于[^a-zA-Z0-9_]
// \w [a-zA-Z0-9_]
// \w*
// \w+
// \w?
var reg = /g\w+gle/
console.log(reg.test("google"));//true
8. \d
\d代表数字, 等价于 [0-9]
var reg = /g\dgle/
console.log(reg.test("g1gle"));//true
9. \D
\D匹配非数字, 相当于[^0-9]
var reg = /g\Dgle/
console.log(reg.test("g#gle"));//true
10. \s
\s匹配空格
var reg = /g\sgle/
console.log(reg.test("g gle"));//true
11. \S
\s匹配非空格
var reg = /g\Sgle/
console.log(reg.test("gcgle"));//true
12. {n}
{n}固定n次
var reg = /g\w{2}gle/
console.log(reg.test("gs1gle"));//true
13. {n,m}
{n,m}最少n次,最多m次
var reg = /g\w{2,5}gle/
console.log(reg.test("gs1defgle"));//true
14. {n,}
{n,}最少n次,最多不限
var reg = /g\w{2,}gle/
console.log(reg.test("gs1xcxcxcxxcxcxcdefgle"));//true
15. /^
/^匹配开始,从头开始匹配
var reg = /^google/
console.log(reg.test("googleycfyfty5656565"));//true
console.log(reg.test("123google"));//false
16. $/
/^匹配结尾,从结尾开始匹配
var reg = /google$/
console.log(reg.test("googleycfyfty5656565"));//false
console.log(reg.test("123google"));//true
17. ()
()分组模式匹配,加上小括号,将内容进行分组,可以作为一个整体进行多次匹配。
var reg = /^(google)+$/
console.log(reg.test("googlegoogle"));//true
18. |
|使用或模模式匹配,代表或者的意思,匹配其中一种字符。
var reg = /google|baidu|bing/ //三个字符中的其中一个匹配上就为true
console.log(reg.test("googl2e bai3du;bingl"));//true
18. $num
$num匹配第num个用圆括号括起来的子表达式的匹配结果
var reg = /^([a-z]+)\s([0-9]{4})$/i;
var str = "abc 1122"
console.log(reg.test(str));//true
console.log(RegExp.$1);//abc $1 匹配第一个用圆括号括起来的子表达式的匹配结果
console.log(RegExp.$2);//1122 $2 匹配第二个用圆括号括起来的子表达式的匹配结果
19. ?:
?:非捕获性分组
//捕获性分组
var reg = /(\d+)([a-z])/ //一个或多个数字,和一个a-z的字母
console.log(reg.exec("123abc"));//'123a', '123', 'a'
//非捕获性分组 ?: (添加?:后不会捕获第二个括号中的内容)
var reg = /(?:\d+)([a-z])/
console.log(reg.exec("123abc"));//'123a', 'a'
var reg = /(?:\d+)(?:[a-z])/
console.log(reg.exec("123abc"));//'123a'