正则表达式学习网站:
正则练习网址: https://www.codejiaonang.com/
正则在线测试网站: https://regexr-cn.com/
正则表达式在线测试:https://c.runoob.com/front-end/854【个人比较推荐这个】
开始学习正则表达式:
1.字符组
表达式:/[Jj]ava/g
解释:可以匹配一组可能出现的字符。
示例:
// 示例一:匹配字符串【Java 8编程语言规范】中存在【Java】字符,其中【j】不区分大小写
var pattern = /[Jj]ava/,
str = 'Java 8编程语言规范';
console.log(pattern.test(str));
// 结果:true
2.区间
表达式:/[0-9]ava/g
解释:区间匹配,比如要匹配0到10的所有数字,需要在字符组中从0写到10,比较繁琐,这时我们可以用==连字符"-"==来表示,连字符支持数字和字母
- 匹配任意数字:
[0-10]
- 匹配任意小写字母:
[a-z]
- 匹配任意大写字母:
[A-Z]
示例:
// 替换以下字符串中的所有数字为空
var str = "我012是一名Java3311开发人员";
console.log(str.replace(/[0-9]/g,""));
//结果:我是一名Java开发人员
3.匹配特殊字符
表达式:/[0-9\-]ava/g
解释:正则表达式中 - 代表区间,当如要匹配字符串中的 - 等特殊符号时,可以使用\
来进行转义(包括所有特殊符号)
示例:
// 替换以下字符串中的所有[-、(、)、[、]]为空
var str = "我-是一名(高级)[开发人员]";
console.log(str.replace(/[\-\(\)\[\]]/g,""));
//结果:我是一名Java开发人员
4.取反
表达式:/[^0-9]ava/g
解释:匹配不包含定义字符组中存在的字符串,例如包含数字,只需要在匹配数字的字符组前面加上^
示例:
// 替换以下字符串中的所有非数字字符为空
var str = "树上7个猴,1个母猴,6个公猴";
console.log(str.replace(/[^0-9]/g,""));
//结果:715
5.快捷匹配
表达式:/[\d]ava/g
解释:匹配字符数字0-9或者字母A-Z等简洁操作
快捷方式 | 描述 |
---|---|
\w | 与任意单词字符匹配,任意字符指:[A-Z]、[a-z]、[0-9]、_ |
\d | 与任意数字匹配 |
示例:
// 替换字符串中所有数字英文字母
var str = "java1.8和Java8的区别";
console.log(str.replace(/[\d\w]/g,""));
//结果:.和的区别
6.匹配空白
表达式:/\s/g
解释:匹配空白字符。空格、tab、换行等。
示例:
// 替换字符串中所有空白字符
var str = "j a v a1.8和Java8的区别";
console.log(str.replace(/\s/g,""));
//结果:ava1.8和Java8的区别
7.单词边界
表达式:/\bJavaz\b/g
解释:匹配整个单词
示例:
// 替换字符串中所有Java字符
var str = "Java是一门超级牛逼的语言,我是一名Java爱好者!";
console.log(str.replace(/\bJava\b/g,""));
//结果:是一门超级牛逼的语言,我是一名爱好者!
8.快捷方式取反
表达式:/\D/g
解释:例如匹配所有非数字:\D
,其他快捷方式也是,只需要把小写变成大写就是取反。
示例:
// 替换字符串中所有非数字
var str = "Java1.0、Java2.0、Java3.0!";
console.log(str.replace(/\D/g,""));
//结果:102030
9.开始和结束
表达式:/^java/g
解释:^
指定字符串开始,$
指定字符串结束
示例:
// 匹配下列字符串是否以OS结尾
var pattern = /OS/g,
str = 'AppleOS$';
console.log(pattern.test(str));
//结果:true
10.任意字符
表达式:/java../g
解释:.
代表匹配任何单个字符,只能出现在方括号内只有一个字符==\n==不能匹配
示例:
// 替换所有以Java开头的6个字符单词为空
var str = "Java1.0、Java2.0、Java3.0!";
console.log(str.replace(/Java../g,""));
//结果:0、0、0!
11.可选字符
表达式:/java?/g
解释:?
指定一个字符、字符组或其他基本单元可选,该字符出现零次或者一次
示例:
// 替换所有以Java开头的6个字符单词为空
var str = "Java1.0、Java2.0、Java3.0!";
console.log(str.replace(/Java../g,""));
//结果:0、0、0!
12.重复
表达式:/\d{4}?/g
解释:{N}
表示在它之前的字符组出现的次数。
示例:
// 替换字字符串中出现的不低于2位的数字为0
var str = "我是一个Java程序员,现在18岁!";
console.log(str.replace(/\d{2}?/g,0));
//结果:是一个Java程序员,现在0岁!
13.重复区间
表达式:/\d{4,8}/g
(贪婪模式)/\d{4,8}?/g
(非贪婪模式)
解释:{M,N}
M
表示下界,N
表示上届,/\d{4,8}/g
即表示数字可以出现的次数为4到8次之间。默认贪婪模式,加上?
代表非贪婪模式。
- 贪婪模式:即优先匹配尽可能多的字符。
- 非贪婪模式:匹配少的字符,匹配到结果就好
// 替换字字符串中出现的不低于2位的数字为0
var str = "我是一个Java程序员,现在18岁!";
console.log(str.replace(/\d{2}?/g,0));
//结果:是一个Java程序员,现在0岁!
14.开闭区间
表达式:/\d{1,}/g
速写:/\d+/g
、\d*/g
解释:闭区间不写表示匹配1个或者无数个,+
等价于{1,}
、{0,}
// 替换Java开头带数字的所有字符
var str = "Java1234567,123456,Java1!";
console.log(str.replace(/Java\d+/g,''));
//结果:,123456,!
15.手机号匹配
手机号匹配正则:
^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$