正则

神马是正则?

正则就是一个规则,用来处理字符串的规则

  1. 正则匹配: 编写一个规则,验证字符串是否符合这个规则,正则匹配使用的是test方法
  2. 正则捕获: 编写一个规则,在一个字符串中把符合规则的内容都获取到,正则捕获使用的方法: 正则的exec方法,字符串中的split、replce、match等方法都支持正则
var reg = /^$/; //-->俩个斜杠之间包含一些内容就是正则,俩个斜杠之间包含的全部内容就是元字符

正则的元字符和修饰符

任何一个正则都是由 元字符修饰符 组成的

修饰符:

  • g :(global) 全局匹配
  • i:(gnoreCase) 忽略大小写匹配
  • m:(multiline) 多行匹配

元字符
[量词元字符]

符号意义
+让前面的元字符出现一到多次
?出现零到一次
*出现零到多次
{n}出现n次
{n,}出现n到多次
{n,m}出现n到m次

[特殊意义的元字符]

特殊意义
\转义字符(把一个普通字符转变为有特殊意义的字符,或者把一个有意义的字符转换位普通的字符)
.除了\n(换行符)以外的任意字符
\d匹配一个0~9之间的数字
\D匹配一个非0~9之间的数字(大写字母和小写字母的组合正好相反)
\w匹配一个0~9、字母、数字之间的字符
\W匹配一个非0~9、字母、数字之间的字符
\s匹配一个任意空白字符
\b匹配一个边界符
x\|y匹配x或者y中的一个
[a-z]匹配a-z中的任意一个字符
[^a-z]匹配任意一个非a-z的字符
[xyz]匹配x或者y或者z中的一个字符
[^xyz]匹配除了xyz以外的字符
()正则的小分组,匹配一个小分组(小分组可以理解为达正则中的一个小正则)
^以某一个元字符开始
$以某一个元字符结束
?:只匹配不捕获
?=正向预查
?!负向预查

除了以上特殊元字符和量词元字符,其余的都叫做普通元字符,代表本身意义的元字符

元字符详细解读

^ $

let reg = /\d+/; //-->包含某某某即可,这里说明包含1到多个数字即可
let str = 'asasff235sgsdg336dsgsd22'
reg.test(str); //true

reg = /^\d+/;
reg.test(str); //false

reg = /^\d+$/  //-->只能是某某某,这里只能是一到多个数字
reg.test('2018') //true
reg.test('1ds2') //false
reg.test('2') //true -->^或者$只是一个修饰或者声明,不会占据字符串的位置

\

let reg = /^2.3$/
reg.test('2.3') //true
reg.test('2+3') //true -->点在正则中的意思:匹配除了\n以外的任意字符,而不是小数点

reg = /^2\.3$/
reg.test('2.3') //true
reg.test('2+3') //false -->使用转义字符把点转换为本身小数点的意思

reg = /^\\d$/
reg.text('9') //false

x|y

let reg = /^0|1$/
reg.test('0') //true
reg.test('1') //true

reg = /^18|19$/  //18 19 118 119 181 819 1819 ...很多都符合这个规则

/*
	18或者19
	以1开头 以9结尾 中间是8或者1
	以18开头或者以19结尾即可 -->'18aa' 'aa19' ...
*/

reg = /^(18|19)$/ //-->此时只有18或者19符合我们的规则了

():正则中的分组,也可以理解为一个大正则中的一个小正则(包起来的部分是一个整体);在正则中可以使用小括号改变一些默认的优先级

小分组还有第二个作用:分组引用
小分组的第三个作用:分组捕获

//-->分组引用:\1 或者 \2 ...出现和第N个分组一模一样的内容
let reg = /^([a-z])([a-z])\2(a-z)$/
reg.test('food') //true
reg.test('foad') //false

[]

[xyz] [^xyz] [a-z] [^a-z]

//-->\w:数字字母下划线中的任意一个字符
var reg = /^[a-zA-z0-9]$/ //-->等价于\w

//-->中括号中出现的元字符一般都代表本身的含义
var reg = /^[.?+&]+$/  //-->里面的元字符都是本身含义,例如:点就是小数点了,不是所谓的任意字符...

//-->需求:描述样式类名的规则(数字、字母、下划线、-),并且不能以-开头
var reg = /^\w[\w-]*$/
//-->需求:验证18-65之间的年龄
// var reg = /^[18-65]$/  //-->这个正则表示1或者8~6或者5中的任意一个字符,中括号中出现的18不是数字18,而是1或者8,当前正则是非法的,因为不能设置8~6这种范围

//-->分三个阶段处理:
// 18 或者 19
//20~59
//60~65
var reg = /^((18|19)|([2-5]\d)|(6[0-5]))$/

常用的正则表达式编写

验证是否为有效数字

//可能是正数,可能是负数 12 -12
//整数或者小数 0 12 0.2 -12.5
//只要出现小数点,后面至少要跟一位数字
//小数点前面必须有数字

var reg = /^-?(\d|([1-9]\d+))(\.\d+)?$/
// -?负号可有可无
// (\d|([1-9]\d+))
// \d 一位数可以是任何值
// ([1-9]\d+) 多位数不能以零开头
// (\.\d+)? 小数部分可有可无,有的话点后面必须跟一位数字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值