正则表达式内容梳理

正则、(RegExp)

正则表达式是一个描述字符模式的对象,在js中,RegExp表示正则对象。正则的功能十分强大,可以大幅度简化代码。

正则的功能

正泽德功能可以匹配检索大批量数据。切使用范围非常广泛

  • 验证用户数据(登陆注册)
  • 采集数据/爬虫 (爬数据)
  • 符号匹配 (检索)
  • 验证网页信息(匹配)

创建正则表达式

script  
var rel = /abc/ //创建一个正则表达式给变量
var rel2 = new RegExp(/abc/)构建函数创造正则
//构建函数的第二种写法 
var rel2-1 = new RegExp(”abc“)
//等同于直接写入正则
var rel3 = RegExp(”hell “)//将一个字符串转化为正则
转换函数
script  

正则表达式的三种写法没有固定要求,但是如果你眼睛不瞎坑定选择第一种。

基础语法

demo:

var str = "a1bcd"
var rel = /\d/g //\d为匹配数字
console.log(rel.test(str)) ture
//测试字符串里是否存在满足正则的内容,有为ture 没有为false

以上代码中,用来测试结果,一种非常常见的写法。
demo:

var a = "abcgfjkl00";
var rle = /b/ //检索b
console.log(a.search(rle))
//检索满足正则条件的值在字符串中的索引值

以上代码用了search方法,用域检索索引值。
demo:

var str = "123 456 789 789 asd asd ";
var rel = /123/ 
console.log(str.match(re));匹配 match
//输出的是123 ,因为只匹配了一次想要全部匹配需要在正则后面加g
var rel2 = /123/g //全部配

以上demo调用的match方法,match中文意思是匹配配对,用次方法配合正则的g转义符可以检索所有哦符合正则条件的值。

正则的配合

使用正则配合一些方法可以达成一些非常强大的功能

  • match() //此方法用于匹配,正则中用来在字符串中寻找满足正则条件的参数。
  • replace ()//找到一个符合正则的内容并且用新的自定义内容进行替换
  • substring() // 此方法同于提取字符串中介于方法内提供的两个值之间的字符
  • search() //和正则匹配时可以找到与正则表达式相匹配的字符的索引值。
  • test() //测试 用于判断一个字符串里面是否有匹配正则结果的值
  • RegExp() //正则类型转换;
  • split () //此方法将字符串从指定索引值出分割,并指定分割后的长度,
  • charAt () //该方法可指定一个索引值并根据索引值获取字符串中相对应的值

正则转义字符

正则中存在着许多字符,有些字符在解析之后(转义)对正则的匹配的类型有非常大的帮助。

常用的转义字符

  • \d 匹配数字
  • \w 匹配数字字母下划线
  • \s 匹配所有空白字符
  • \D 匹配所有非数字
  • \S 匹配所有非数字字母下划线
  • \S 匹配所有可见字符
  • . 匹配所有

match 匹配

var str = "1231asdasd23"
var rel = / \d+/;
console.log (str.match(rel));
//结果只找到了一个数字

字符串中虽然存在着符合正则条件的值但是只输出了一个,此时如果在正则后面加一个g就可以作用于整个字符串。

var rel = /d/g

此通过修饰符g已经拿到了所有的数字

var rel = /\d+/g
var str = "123 123 456"
//此时修饰符+号可以匹配任意长度的值
输出
console.log(str.match(rel))

虽然g修饰符可以帮我们找出来所有满足要求的值,但是如果我们要在数组里面找到一串值,就只能去匹配字符串的长度来寻找,+可以匹配任意长度的值。

正则的其他写法

虽然有许多修饰符的存在可以让处理正则表达式更加方便,如果我们需要自定义检索范围尽心配对的话,还是需要使用自定义检索范围的写法

  • /{n,0}/ //第一个值是出现n次,第二个值是这个值的阈值
  • /{n}/ //只写一个值说明出现的最小次数等于最大次数。

replace转换网页爬去的数据

var rel = /<.+>g/

因为html标签名长度和标签类型并不固定所以使用.可以匹配所有的标签名,使用+可以匹配所有长度的标签。

贪婪模式

贪婪模式是因为在js中,正则表达式会在匹配成功的前提下会尽可能的夺取匹配数据,而非贪婪模式,是在满足配对的条件下尽可能少的去匹配数据。

var rel = /^\w+@[a-z0-9]+\.[a-z]{2,3}$/
//^上尖括号表示开始,$表示结束。将整个正则表达式圈起来就不会再发生贪婪模式的现象。

中文匹配

正则当中汉字也是可以进行配对的,配对的范围是计算机中打出的第一个汉字到最后一个汉字
第一个是一最后一个是龥yu。 正则写法是[\u2e80-\u9fff]这个代表了汉字的范围;

模式单元

原子

正则当中,我们输入的每一个字符都是一个原子,原子是最基本的组成部分,也是最小的单位,

改变优先级

在正则当中()被称为模式单元可以改变优先级。

console.log("jack".match(/jack|rose/)); // jack

模式单元写法:

console.log('jack'.match(/jac(k|r)ose/))

一般来讲上面的代码是不会匹配到内容,实际上正确的会被匹配到的内容应该是jackose或者jacrose

将多个原子视为一个原子

console.log("dds".match(/dds/))
//显然返回的是dds

如果需要匹配多个dds就可以将多个原子视为一个原子
demo:

console.logconsole.log("ddsddsdds".match(/(dds){1,3}/));// 
//返回的shiddsddsdds

存储内容到内存中

正则可以将内容村粗到内容中,并且可以通过索引值对内存中的数据进行访问,

console.log('aaa'.match(/aaa/)); // aaa
// 我们如果改为下面这种写法
console.log('aaa'.match(/(a)(a)(a)/)); // 0:aaa  1:a 2:a  3:a 内容被存储到了内存之中

因为内存容量能省则省,所以当想把数据从内存中移除的话可以通过"?;"的形式来一处。
demo:

console.log('aaa'.match(/(?:a)(a)(a)/));// 0:aaa  1:a 2:a
posted @ 2019-05-16 00:58  des杜甫  阅读(505)  评论(2编辑  收藏  举报