正则

  1. 正则regexp

正则 就是一条规则,用于检验字符串的格式,目标就是字符串。

只要要是表单提交的数据都是字符串。

  1. 正则定义
  2. var reg=new RegExp()
  3. Var reg=/格式/
  4. 正则的方法

就两大功能,一个是匹配,匹配成功就是true,第二个是捕获,如果有就拿出来。

Test() 用于匹配

Exec()用于捕获

  1. 正则修饰符  如何去匹配
  2. 区不区分大小写  i  代表忽略大小写
  3. 全局     g代表全局匹配
  4. M代表多行匹配

怎么使用

  1. var reg=new RegExp(“hello”,g)
  2. Var reg=/hello/gi

 

11.字符串的方法 跟正则有关的

1.match()查找一个或多个与正则相匹配的 有就返回的是查找的结果,没有就是null

 

2.search() 匹配和正则相同的字符,有就返回索引,没有就是-1

 

  1. replace()匹配与正则相同的,并替换掉,返回的是替换后的字符串

 

12,正则的方括号

[abc] 代表查找方括号中的任何字符

[^abc]代表查找任何一个不在方括号之间的字符

[0-9]查找09之间的数字

[a-z] 查找任何小写a到小写z的字符

[A-Z]查找任何大写A到大写Z的字符

[A-z]查找大写A到小写z的字符

(red|blue|green)

13元字符

.代表单个字符

\w代表单词字符  数字 字母 _

\W 代表非单词字符

\d 代表数字

\D 代表非数字

\s 代表空白字符

\S 代表非空白字符

\b 代表单词边界

\B 代表非单词边界

  1. 量词
  2. n+ 代表至少1n的字符
  3. n* 代表0个或多个n
  4. n? 包含0个或1n
  5. N{x} 包含xn
  6. N{x,} 包含至少xn
  7. N{x,y} 包含大于等于x个小于等于yn
  8. N$  包含以n结尾的字符串
  9. ^n包含以n开头的字符串

9?=n 指定字符串后面紧跟的n的字符串

--

正则RegExp

概念:用来检验字符串的规则。

如何使用

Var reg=//  var reg=new RegExp() 最后的本质都是一个对象

方法

Test() 匹配的方法

Exec()捕获的方法

修饰符

img

方括号

[]

元字符\d

量词

 

正则的理解

  1. 正则的懒惰性

每一次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下捕获了。我们把这叫正则的懒惰性,每一次捕获的开始位置都是从0开始

 

解决正则的懒惰性呢

修饰符g

正则的实例对象reg上有一个lastIndex属性 他是正则捕获的起始位置

 

  1. 正则的贪婪性

每一次匹配都是按照最长的出结果,我们把这种功能叫正则的贪婪性

 

如何解决正则的贪婪性

在元字符量词后面加?

 

补充 循环语句  for   for  in  while   do---while---

 

分组捕获 正则带()  在数分组的个数时从左往右

var reg=/(a)(b)/ 就相当于大正则里面带了两个小正则

第一组是(a) 第二组是(b)

分组捕获的作用

  1. 改变优先级
  2. 分组引用  \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. 分组捕获的优势
  2. 可以提升优先级
  3. 可以捕获引用

\1代表分组1里面的内容  \2代表分组2里面的内容

前提是分组必须在引用之前,如果\2在分组的前面代表普通的表达式???

分组的结果存在正则类RegExp$number属性下。

\1 RegExp.$1 二者都是分组引用

\1只能使用在正则表达式里面,RegExp.$1 可以外面使用。都是在捕获完成的条件下。

  1. 在捕获的过程中怎样取消捕获分组中的内

在分组的前面加上?:就ok

?:?=的区别

?:取消捕获分组中的内容的

?=  a(?=s)

 

4.replace细说

Replace是字符串的一个方法,他有两个参数,用后者将前者替换掉,并返回一个新的字符串,但是没有改变原来的字符串.

  1. 如果第一个参数是字符串,只改变一次
  2. 如果第一个参数是正则,捕获一次改变一次
  3. 如果第二个参数是匿名函数,每捕获一次这个匿名函数会执行一次,return的是什么,那就替换成什么。这个匿名函数的arguments有三个元素。

 

正则详细讲解

  1. 每一个正则都是由元字符和修饰符组成
  2. 元字符 //之间有特殊意义的字符
  3. 具有特殊意义的元字符
  4. \转义字符,转义后面后面字符所代表的含义
  5. ^以某一个元字符开始   读kangchuo
  6. $以某一个元字符结尾
  7. \n匹配一个换行符
  8. .除了\n以外的任意一个字符

 

  1. ()分组,把一个大正则划分为几个小正则
  2. X|y x或者y中的一个
  3. [xyz]x或者y或者z三者中的一个
  4. [^xyz] ^读作v

Var reg=/^\d$/  只能是一个0-9之间的数字

是因为^$不占用位置只有\d占位置

 

 

 

 

 

4.代表出现次数的量词的元字符

1.*代表出现0-多次

2+出现1到多次

3,?出现01

4{n}出现n

5{n}出现n到多次

6.{n,m}出现nm

规律

[]

  1. []中出现的所有的字符都是代表本身意思的字符
  2. [.]就是本身的.[+]代表的就是+本身
  3. []里面不识别双位数[12] 不是121或者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. 可以是以1开头以9结尾的字符串 189 119 119
  2. 也可理解为以18开头或以19结尾 181 119

而后者只有一种就是18或者19

分组提升了优先级

分组的第一个作用就是改变优先级

案例2

 

12.20

  1. 正则:检索字符串的一条规则。
  2. 正则就是由元字符和修饰符构成。
  3. 写在//里面的都叫元字符,元字符分两种 一种是有特殊意义,一种没有特殊意义,没有特殊意义的就是字符本身。

特殊意思的元字符

  1. \ 转义字符  转译后面紧跟的字符的意义 \d  \.
  2. . 代表除了\n以外的任何单个字符
  3. dDwWs,Sb,B
  4. ^ 以什么开头 kangchuo
  5. $ 以什么结束   \$ 就是$本身
  6. |代表或的意思

带有量词意思的元字符

  1. ? 代表01
  2. * 代表0到多个
  3. +代表1到多个

4,{}系列

[]系列元字符

[xyz]代表xyz中的任意一个

[0-9]代表0-9之间的任意一个

[a-z]代表小写a到小写z

[A-Z]代表大写A到大写Z

[A-z]

()分组系列

(x|y)

正则的细节

  1. 正则定义的区别

Var reg=/hello/g

Var reg=new RegExp(“hello”,”g”)

前者里面不能引用变量,后者可以。

2.reg=/^\d$/

 

因为^$符不占用位置,也就说明开头和结尾之间夹了一个数字,表达一个纯数字

3././/\./的区别

 

  1. [.],[+]的意思

.+在正则里是特殊的元字符,.是任意字符+是量词代表多个。

[]里面的.+就是这个字符本身,没有意义。

  1. |代表或

[2|3] 代表23

[12|34] 代表12|34,或者1234 往往这种情况需要分组()

[(12|34)]

[xyz]

  1. -的问题

/-/ 就是-本身。没有意义,如果写在[0-9]代表09之间的任意一个数字。

[12-65]代表1865之间的数字???

表达的是1或者2-6的数字或者5

案例1写一个1265周岁的正则

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))

posted @ 2018-12-21 10:09  不动如山田  阅读(225)  评论(0编辑  收藏  举报