继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

由浅入深 玩转正则表达式

穆圣
关注TA
已关注
手记 11
粉丝 13
获赞 115

正则表达式,又称规则表达式。(英语: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"]
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP