正则、(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