由浅入深 玩转正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
创建正则的两种方式
var p = new RegExp('a')
console.log(p)// ----/a/
//正则的引用
var p = /a/
正则表达式的使用
正则表达式是一个对象,这个对象中常见的有三个方法:compile(), exec(), test(); 其中complile用的不多,test()它是用来验证, exec()是用来匹配的。先来说下test()。
test的用法:
正则表达式.test(字符串); 如果验证成功就返回true, 否则返回false。
var p = /a/
console.log(p.test('abc')) //true
简单深入
正则的组成
var p = /a/
三个组成部分:
原子: 必选,不能少。 最基本的组成单位。
元字符: 可选, 用来修饰原子。
模式修正符:可选,共有三个 i , g, m
I:忽略大小写
G:全局匹配
M:多行匹配
var p = /a/i
console.log(p.test('Abc')) // true
原子
最基本的组成单位,不能少。
按照原子的表现能力,可以为分两类:
1,只能表示一个字符的原子
大小写字母,数据,下划线,符号....
2,可以表示一类字符的原子
/\d/ 表示十进制的数字[0-9], 只要包含数字就是true
/\D/ 表示只要包含非数字就是true
/ \s/ 表示空白字符(空格, tab, 回车键)只要有空白就是
true
/ \S/ 表示非空白字符(空格, tab, 回车键) 只要有非空白就是 true
/\w/ 表示一个字 0~9 a~z A~Z _
/\W / 表示除了 0~9 a~z A~Z _ 以外的字符
,对于test()来说,只是检测有还是没有。 不管字符串中的个数。
2,对于test()来说,不管字符出现在字符串中什么位置。
3,对于test()来说,正则中的字符串顺序要与字符串中子串的顺序一致。
4,使用模式修正符,可以不考虑大小写问题。
元字符
开始元字符: ^
出现位置:一般是在正则表达式的最前面出现
作用:表示必须要以它后面紧贴的那个原子作为开始
结束元字符: $
出现位置:一般是在正则表达式的最后面出现
作用:表示必须要以它前面紧贴的那个原子作为结束
代码如下:
let p = /c$/i //首字母一a开始
console.log(p.test('ac')) //ture
数量相关的元字符 {} * + ?
a, {m} : 前面的原子必须要出现m次。
let p = /^0\d{4}$/
console.log(p.test('01234')) //true
{m,n} : 前面的原子必须至少要出现m次,最多出现n次。
‘*’ 表示前面的原子可以出现0或很多次,类似于{0,}
? 表示前面的原子可以出现0或1次,类似于{0,1}
var srt = '生日18-04-5'
let P = /生\d?/
console.log(P.test(srt)) //true
'+'表示前面的原子至少要出现1次
var srt = '生日18-04-5'
let P = /日\d+/
console.log(P.test(srt)) //ture
逻辑相关的元字符 [] |
[] : 表示多个原子,只要有一个在目标字符串中出现就行。
let p = /[ab]/
console.log(p.test('a')) //true
console.log(p.test('b'))//true
console.log(p.test('c'))//false
console.log(p.test('ab'))//true
在[]中还可以使用两个额外的符号: ^ -
^ 表示取反
let p = /[^ab]/
console.log(p.test('a')) //false
console.log(p.test('b'))//false
console.log(p.test('c'))//true
console.log(p.test('ab'))//false
- 表示区间
var p1 = /[0-4]/
console.log(p1.test('15')) //true
console.log(p1.test('5'))//false
|
const p = /abc|def/
console.log(p.test('adef'))//true
console.log(p.test('abce'))//true
console.log(p.test('abef'))//false
转义符 \
我们前面学习了很多的元字符 $ ^ {} [] ? * | 等等,当你想要这些元字符当作一个普通的原子使用时,这个时候你需要用到转义符 /
const p = /^\^\$*$/
const p2 = /^\$\*+$/
const p3 = /a\*?\$*\++$/
console.log(p.test('^'))
console.log(p2.test('$*'))
console.log(p3.test('a+'))
//很简单自己先得出结果
//三个都是“”“
// 快速得出结果 说明你已经入门了
分组组合
const p = /^(ab)+\(\[+$/
console.log(p.test('ab(['))//true
总结:
1, $ 如果它出在正则表达式的最后,表示以它紧挨着前面的原子结尾。 如果想看一个目标字符串中没有没$本身。 要使用转义后的:$
2, ^ 如果它出在正则表达式的最前面,表示以它紧挨着后面的原子作为开始。看一个目标字符串中没有没^本身。 要使用转义后的:^
3,+ 表示前面的原子要连续的出现1次或多次,看一个目标字符串中没有没+本身。 要使用转义后的:+
4, * 表示前面的原子要连续的出现0次或多次,看一个目标字符串中没有没*本身。 要使用转义后的:*
5, ?示前面的原子要的出现0次或1次,看一个目标字符串中没有没?本身。 要使用转义后的:\?
6,[] 表示一个原子表的开始与结束, 看一个目标字符串中没有没[, ]本身。 要使用转义后的:[ ]
7,() 表示分组, ()里面的内容我们可以叫它为子表达式,[]里面的内容我们只可以叫它为原子表。()表示子表达式的开始与结束。看一个目标字符串中没有没(, )本身。 要使用转义后的:\( \)
8,| 指两项之间的选择。看一个目标字符串中没有没|本身。 要使用转义后的:|
9,{} 表示数量相关的一个元字符, 看一个目标字符串中没有没{}本身。 要使用转义后的:{ }
10, 看一个目标字符串中没有没\本身。 要使用转义后的:\
简单练习如下:
手机号的验证
const testphone = /^1[3-8]\d{8}\d$/
console.log(testphone.test('telphonenumber')) //true
身份证号的验证
const person = /^\d{6}[1|2]\d{3}[0|1]\d[0-3]\d{4}[\d|X]$/
console.log(person.test('4128.............'))
正整数的验证
//正整数的验证
const num = /^[1-9]\d*$/
console.log(num.test('14512'))
邮箱的验证
正确: 2345@qq.com abc@sina.cn 6789@163.com _45678@qq.net
错误: 234qq.com sdf@.com 2345.com
第二步提炼:
1,在@前面必须有内容
2,只能有一个@
3,有一个. 并且这个.要出现在@的后面
4,所有字符都必须是0-1, a-z, A-Z, _ —> \w
5,@和. 之间必须要有至少要有2个以上的数字,或字母(不分大小写)
6,.后面有2个以上的大小字母
//邮箱的验证
const p = /^\w+@[0-9,a-z,A-Z]{2,}.[a-z,A-Z]{2,}/
console.log(p.test('1@88.co'))//true
十六进制颜色的验证
const p = /^#([0-9,a-f]{6}$)|([0-9,a-f]{3}$)/i
console.log(p.test('#fffffg'))//false
exec()方法学习
var str = "小明今年38岁,年龄23 , 体重55"
const p = /[1-9]\d*/g
while(data = p.exec(str)){
console.log(data)
}
输出结果如下
["38", index: 4, input: "小明今年38岁,年龄23 , 体重55"]
["23", index: 10, input: "小明今年38岁,年龄23 , 体重55"]
["55", index: 17, input: "小明今年38岁,年龄23 , 体重55"]
共同学习,写下你的评论
评论加载中...
作者其他优质文章