正则
- 正则regexp
正则 就是一条规则,用于检验字符串的格式,目标就是字符串。
只要要是表单提交的数据都是字符串。
- 正则定义
- var reg=new RegExp();
- Var reg=/格式/;
- 正则的方法
就两大功能,一个是匹配,匹配成功就是true,第二个是捕获,如果有就拿出来。
Test() 用于匹配
Exec()用于捕获
- 正则修饰符 如何去匹配
- 区不区分大小写 i 代表忽略大小写
- 全局 g代表全局匹配
- M代表多行匹配
怎么使用
- var reg=new RegExp(“hello”,g)
- Var reg=/hello/gi
11.字符串的方法 跟正则有关的
1.match()查找一个或多个与正则相匹配的 有就返回的是查找的结果,没有就是null
2.search() 匹配和正则相同的字符,有就返回索引,没有就是-1
- replace()匹配与正则相同的,并替换掉,返回的是替换后的字符串
12,正则的方括号
[abc] 代表查找方括号中的任何字符
[^abc]代表查找任何一个不在方括号之间的字符
[0-9]查找0到9之间的数字
[a-z] 查找任何小写a到小写z的字符
[A-Z]查找任何大写A到大写Z的字符
[A-z]查找大写A到小写z的字符
(red|blue|green)
13元字符
.代表单个字符
\w代表单词字符 数字 字母 _
\W 代表非单词字符
\d 代表数字
\D 代表非数字
\s 代表空白字符
\S 代表非空白字符
\b 代表单词边界
\B 代表非单词边界
- 量词
- n+ 代表至少1个n的字符
- n* 代表0个或多个n
- n? 包含0个或1个n
- N{x} 包含x个n
- N{x,} 包含至少x个n
- N{x,y} 包含大于等于x个小于等于y个n
- N$ 包含以n结尾的字符串
- ^n包含以n开头的字符串
9,?=n 指定字符串后面紧跟的n的字符串
--
正则RegExp
概念:用来检验字符串的规则。
如何使用
Var reg=// var reg=new RegExp() 最后的本质都是一个对象
方法
Test() 匹配的方法
Exec()捕获的方法
修饰符
img
方括号
[]
元字符\d
量词
正则的理解
- 正则的懒惰性
每一次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下捕获了。我们把这叫正则的懒惰性,每一次捕获的开始位置都是从0开始
解决正则的懒惰性呢
修饰符g
正则的实例对象reg上有一个lastIndex属性 他是正则捕获的起始位置
- 正则的贪婪性
每一次匹配都是按照最长的出结果,我们把这种功能叫正则的贪婪性
如何解决正则的贪婪性
在元字符量词后面加?
补充 循环语句 for for in while do---while---
二 分组捕获 正则带() 在数分组的个数时从左往右
var reg=/(a)(b)/ 就相当于大正则里面带了两个小正则
第一组是(a) 第二组是(b)
分组捕获的作用
- 改变优先级
- 分组引用 \1,\2
\2代表和第二个分组出现一模一样的内容,\1代表和第一个分组出现一模一样的内容
Reg中的规则是第一个是一个分组 且是一个单词字符 第二个是个分组引用要求和第一组一模一样,第三个是第二个分组且是一个单词字符,第四个是一个分组引用,要求和第二组一模一样。
3.分组捕获
分组的捕获前提是正则存在分组,不仅把大正则的内容捕获到,把小正则的内容也捕获到。
怎样解除分组中分组捕获呢,如果你不想捕获某一个分组中的内容,在这个分组的前面加上?:就可以了
12.19
1.var reg=/./ var reg=/\./
前者代表任意一个字符而后者代表这个字符串中得有一个.
2.?的使用
如果单独的一个字符后面带? var reg=/\d?/ /n?/
代表一个或0个这个字符的出现
如果是量词+和*,{2,}后面带? 取消正则的贪婪性 在捕获阶段
3.捕获
1.普通捕获 exec() match()
普通捕获有懒惰性,给正则添加一个修饰符g可以解决,match是将所有捕获的内容放在一个数组中并返回。Match就是对exec的一个简单封装。
2.分组捕获 捕获的方法还是exec 和match
正则在结构上发生了变化,加()
Var reg=/(a)(b)/
Exec()和match()在非全局下分组捕获是相同的,在捕获的过程中即捕获大正则里的内容也捕获分组中的内容并都返回。
Exec()和match()在全局下的分组捕获是不一样的,exec()不变。但是match()只捕获大正则里的内容
- 分组捕获的优势
- 可以提升优先级
- 可以捕获引用
\1代表分组1里面的内容 \2代表分组2里面的内容
前提是分组必须在引用之前,如果\2在分组的前面代表普通的表达式???
分组的结果存在正则类RegExp的$number属性下。
\1 和RegExp.$1 二者都是分组引用
\1只能使用在正则表达式里面,RegExp.$1 可以外面使用。都是在捕获完成的条件下。
- 在捕获的过程中怎样取消捕获分组中的内
在分组的前面加上?:就ok了
?:和?=的区别
?:取消捕获分组中的内容的
?= a(?=s)
4.replace细说
Replace是字符串的一个方法,他有两个参数,用后者将前者替换掉,并返回一个新的字符串,但是没有改变原来的字符串.
- 如果第一个参数是字符串,只改变一次
- 如果第一个参数是正则,捕获一次改变一次
- 如果第二个参数是匿名函数,每捕获一次这个匿名函数会执行一次,return的是什么,那就替换成什么。这个匿名函数的arguments有三个元素。
正则详细讲解
- 每一个正则都是由元字符和修饰符组成
- 元字符 在//之间有特殊意义的字符
- 具有特殊意义的元字符
- \转义字符,转义后面后面字符所代表的含义
- ^以某一个元字符开始 读kangchuo
- $以某一个元字符结尾
- \n匹配一个换行符
- .除了\n以外的任意一个字符
- ()分组,把一个大正则划分为几个小正则
- X|y x或者y中的一个
- [xyz],x或者y或者z三者中的一个
- [^xyz] ^读作v
Var reg=/^\d$/ 只能是一个0-9之间的数字
是因为^和$不占用位置只有\d占位置
4.代表出现次数的量词的元字符
1.*代表出现0-多次
2,+出现1到多次
3,?出现0都1词
4,{n}出现n词
5,{n,}出现n到多次
6.{n,m}出现n到m次
规律
[]
- 在[]中出现的所有的字符都是代表本身意思的字符
- [.]就是本身的.[+]代表的就是+本身
- []里面不识别双位数[12] 不是12是1或者2
[12-68] 代表的是1或者2-6中的一个或者8
案例1 有效数字的正则
0.4 12.0 12 +12 -12 09
var reg=/^[+-]?(\d|([1-9]\d+))(\.\d+)$/
|的混乱
Reg=/^18|19$/ 和/^(18|19)$/
前者表达的优先级特别多
- 可以是以1开头以9结尾的字符串 189 119 119等
- 也可理解为以18开头或以19结尾 181 119 等
而后者只有一种就是18或者19
分组提升了优先级
分组的第一个作用就是改变优先级
案例2
12.20
- 正则:检索字符串的一条规则。
- 正则就是由元字符和修饰符构成。
- 写在//里面的都叫元字符,元字符分两种 一种是有特殊意义,一种没有特殊意义,没有特殊意义的就是字符本身。
特殊意思的元字符
- \ 转义字符 转译后面紧跟的字符的意义 \d \.
- . 代表除了\n以外的任何单个字符
- d,D,w,W,s,S,b,B
- ^ 以什么开头 kangchuo
- $ 以什么结束 \$ 就是$本身
- |代表或的意思
带有量词意思的元字符
- ? 代表0到1个
- * 代表0到多个
- +代表1到多个
4,{}系列
[]系列元字符
[xyz]代表x或y或z中的任意一个
[0-9]代表0-9之间的任意一个
[a-z]代表小写a到小写z
[A-Z]代表大写A到大写Z
[A-z]
()分组系列
(x|y)
正则的细节
- 正则定义的区别
Var reg=/hello/g
Var reg=new RegExp(“hello”,”g”)
前者里面不能引用变量,后者可以。
2.reg=/^\d$/
因为^和$符不占用位置,也就说明开头和结尾之间夹了一个数字,表达一个纯数字
3././和/\./的区别
- [.],[+]的意思
.和+在正则里是特殊的元字符,.是任意字符+是量词代表多个。
在[]里面的.和+就是这个字符本身,没有意义。
- |代表或
[2|3] 代表2或3
[12|34] 代表1或2|3或4,或者12,34 往往这种情况需要分组()
[(12|34)]
[xyz]
- -的问题
/-/ 就是-本身。没有意义,如果写在[0-9]代表0到9之间的任意一个数字。
[12-65]代表18到65之间的数字???
表达的是1或者2-6的数字或者5
案例1写一个12到65周岁的正则
var reg=/^(1[2-9])|([2-5][0-9])|(6[0-5])$/
var st="66"
console.log(reg.test(st))
案例2 写一个正常的数字的正则
+12 -12 23 23.256 6 0.36
var reg=/^[+-]?([0-9]|[1-9]\d+)(\.\d+)?$/
var st="60"
console.log(reg.test(st))