#正则、(RegExp) ####正则表达式是一个描述字符模式的对象,在js中,RegExp表示正则对象。正则的功能十分强大,能够大幅度简化代码。 ##正则的功能 正泽德功能能够匹配检索大批量数据。切使用范围很是普遍html
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转义符能够检索全部哦符合正则条件的值。 ###正则的配合 使用正则配合一些方法能够达成一些很是强大的功能测试
var str = "1231asdasd23" var rel = / \d+/; console.log (str.match(rel)); //结果只找到了一个数字
字符串中虽然存在着符合正则条件的值可是只输出了一个,此时若是在正则后面加一个g就能够做用于整个字符串。code
var rel = /d/g
此经过修饰符g已经拿到了全部的数字htm
var rel = /\d+/g var str = "123 123 456" //此时修饰符+号能够匹配任意长度的值 输出 console.log(str.match(rel))
虽然g修饰符能够帮咱们找出来全部知足要求的值,可是若是咱们要在数组里面找到一串值,就只能去匹配字符串的长度来寻找,+能够匹配任意长度的值。 ###正则的其余写法 虽然有许多修饰符的存在可让处理正则表达式更加方便,若是咱们须要自定义检索范围尽心配对的话,仍是须要使用自定义检索范围的写法对象
var rel = /<.+>g/
由于html标签名长度和标签类型并不固定因此使用.能够匹配全部的标签名,使用+能够匹配全部长度的标签。 ##贪婪模式 贪婪模式是由于在js中,正则表达式会在匹配成功的前提下会尽量的夺取匹配数据,而非贪婪模式,是在知足配对的条件下尽量少的去匹配数据。索引
var rel = /^\w+@[a-z0-9]+\.[a-z]{2,3}$/ //^上尖括号表示开始,$表示结束。将整个正则表达式圈起来就不会再发生贪婪模式的现象。
##中文匹配 正则当中汉字也是能够进行配对的,配对的范围是计算机中打出的第一个汉字到最后一个汉字 第一个是一最后一个是龥yu。 正则写法是[\u2e80-\u9fff]这个表明了汉字的范围; ##模式单元 ###原子 正则当中,咱们输入的每个字符都是一个原子,原子是最基本的组成部分,也是最小的单位, ###改变优先级 在正则当中()被称为模式单元能够改变优先级。ip
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