资讯专栏INFORMATION COLUMN

正则基础详解

YanceyOfficial / 2822人阅读

摘要:正则基础详解开头,结尾匹配次或多次匹配次匹配次或次当跟在后面时,匹配模式是非贪婪的匹配确定是次,非负数匹配除了换行符以外的任何字符包括点本身小括号中的内容只匹配不捕获正向预查负向预查匹配或者匹配中任何一个匹配未包含的任意字符匹配指定范围

正则基础详解
/^开头,结尾$/
* 匹配0次或多次
+ 匹配1-n次
?匹配0次或1次;  当?跟在 * + {n}  {n,m} {n,} 后面时,匹配模式是非贪婪的
{n} 匹配确定是n次,n非负数
.  匹配除了换行符
以外的任何字符 包括点本身
(?:pattern) 小括号中的内容只匹配不捕获
(?=pattern) 正向预查
(?!pattern) 负向预查
x|y 匹配x或者y
[xyz] 匹配xyz中任何一个
[^xyz]匹配未包含xyz的任意字符
[a-z]匹配指定范围的字符
[^a-z]匹配不在a到z范围内的任意字符

 匹配一个单词的边界 /er/ 能匹配 never 中的er  不能匹配 verb 中的er
B 匹配非单词边界

d  任意一个数字
D  任意一个非数字

w 匹配包括下划线的任意字符  [a-zA-Z0-9]
W 匹配任何非单词字符

s 空白字符
S 非空白字符


 匹配任意一个换行字符

 回车

reg.exec(str) 返回一个数组
[  0: 匹配到的大正则,  1: 匹配到的小分组1,  2: 小分组2,  3: 匹配到的第一个字符的索引,  4:input:整个str  ]

reg.test(str) 返回true/false


   // 1.反向引用  /(捕获的小分组)数字/
    var reg=/(w)(w)21/;// 2 第二个小分组匹配到的内容,1 第一个小分组匹配到的内容
    var str="woow";
    console.log(reg.exec(str));// ["woow", "w", "o", index: 0, input: "woow"]
 //
 //  var reg = /(捕获的小分组)数字/;  数字 代表的是反向引用,表示 第几个括号内的子正则表达式所捕获的内容,如果小分组加了(?:=pattern),那么反向引用就不管用了。

    //2.小分组只匹配不捕获  (?:=pattern)
    var reg1=/^(?:b|c).+/;
    var str1="bbs.www.baidu.cn";
    console.log(reg1.exec(str1));//  小分组只匹配不捕获  (?:=pattern)
    //["bbs.www.baidu.cn", index: 0, input: "bbs.www.baidu.cn"]

    //3.正向预查(?=pattern) 要求匹配的时候满足括号中的条件
    //  反向预查 (?!pattern) 要求匹配的时候不满足括号中的条件
    //  小括号中的内容只匹配不捕获
    var reg3=/cai(?=8)/;
    var str3="cai9";
    var str4="cai8";
    console.log(reg3.exec(str3));// null
    console.log(reg3.exec(str4));// ["cai", index: 0, input: "cai8"]
    var reg4=/zhufeng(?!shanshang)/;
    var string="zhufengshanshang";
    var string1="zhufengshanshang";
    console.log(reg4.exec(string));// null
    console.log(reg4.exec(string1));//  ["zhufeng", index: 0, input: "zhufengshanshang"]


    //4. 匹配元字符 * +  ? .  就是它们本身就有特殊意义的,需要转义 
    var reg5=/c*/;
    var str05="c*";
    console.log(reg5.exec(str05));//["c*", index: 0, input: "c*"]

    //5.全局修饰符 ,g  不区分大小写 i ,行首行尾 m

    //6.[abc] a或b或c 中的任意一个
    //  [^] 所有的非空字符 不是空格, ^在/^/是以...开头的意思。在[^]是非的意思
    // [1-13] 从1到1或从1到3  不是1-13
    //[元字符] 表示元字符本身的意义,如 [.]表示点本身,不是 除了/n以外的任何字符

    //7. | 或者
    var reg06=/^(z|0).+/;
    var s="zhufeng";
    console.log(reg06.exec(s));// ["zhufeng", "z", index: 0, input: "zhufeng"]

    // 8.贪心匹配:在合法的情况下,正则会尽量多的去匹配字符,能匹配到4个,绝不会匹配3个
    //   非贪心匹配:?  如 {n,}?  *?  +?  {m,n}?

    //9.c{n} 匹配固定n个
    //  c{m,n} 匹配m到n个
    //  c{n,} 最少匹配n个,最多不限制

    //10.exec 与 全局修饰符g
    // 如果没加全局修饰符g,执行多少次都一样
    // 需要手动多次执行,每次执行都会进行新的匹配, 改变了正则的lastIndex的值
    var reg07=/(w)(w)(w)/;
    var s1="bbs.baidu.cn";
    var result1=reg07.exec(s1);
    var result2=reg07.exec(s1);
    console.log(result1);// 如果没加全局修饰符g,执行多少次都一样
    console.log(result2);//["bbs", "b", "b", "s", index: 0, input: "bbs.baidu.cn"]

    var reg08=/(w)(w)(w)/g;//需要手动多次执行 改变了正则的lastIndex的值
    var result3=reg08.exec(s1);
    var result4=reg08.exec(s1);
    console.log(result3);//["bbs", "b", "b", "s", index: 0, input: "bbs.baidu.cn"]
    console.log(result4);//["zhu", "z", "h", "u", index: 4, input: "bbs.baidu.cn"]

    //11.match 字符串类方法  str.match(reg)
    //设置了全局修饰符g,会自动进行多次匹配,并把匹配到的结果放入到数组中,注意没有index和input属性
    //match在没有分组的情况下能够更快捷的把多次匹配到的内容保存到数组中
    //exec正则类方法 reg.exec(str)  注意 二者写法完全不一样

    var reg09=/[bz]/;//不设置全局修饰符,结果和exec一样
    var s3="bbs.baidu.cn";
    console.log(s3.match(reg09));//["b", index: 0, input: "bbs.baidu.cn"]

    var regg=/[bz]/g;//设置了全局修饰符,会自动进行多次匹配,并把匹配到的结果放入到数组中,注意没有index和input属性
    var res=s3.match(regg);
    console.log(res);//["b", "b", "z"]
    //12.replace(参数1:正则表达式 被替换的内容,参数2:字符串/函数 用来替换第一个参数匹配到的内容)
    //字符串方法 查找并替换  ,返回值 一个新的字符串
    //如果reg中有全局标志g,那么将替换所有匹配到的子串,否则,它只替换第一个匹配子串
    //当第二个参数不是字符串,是函数的时候,每次匹配都调用该函数,将这个函数返回的字符串 作为替换文本使用,这个函数自定义替换规则
    //当第二参数是函数时,不仅自动执行此函数,还要给这个函数传3个参数
    //1.当正则没有分组时,传进去的第一个实参是正则捕获到的内容,第二个参数是捕获到的内容在原字符串中的索引位置,第三个参数是原字符串
    //2.当正则有分组的时候,第一个参数是大正则查找到的内容,后面依次是子正则查找到的内容
    //3.传完查找到的内容之后,再把总正则查找到的内容在原字符串中的索引传进,最后传入原字符串
    var ostring="XaZZcUdFe";
    var oreg=/[a-z]/g;
    ostring=ostring.replace(oreg,function () {
      return arguments[0]+"("+arguments[1]+")";
    });
    console.log(ostring);// Xa(1)ZZc(4)Ud(6)Fe(8)
    //不加()小分组,arguments:[ 0:匹配到的字符,1:查找到的内容在str中的索引,2:原字符串 ]
    var ostr="456a89b72cs";
    var oreg11=/(d)(d)/g;
    ostr=ostr.replace(oreg11,function () {
      return  Number(arguments[1])+Number(arguments[2]);
    });
    console.log(ostr);//96a17b9cs

    var astr="a1b2c3d4";
    var rr=/[a-z]/g;
    astr=astr.replace(rr,function (result,position,string) {
      return `在${position}的位置找到了${result},原字符串是${string};`;
    });
    console.log(astr);//在0的位置找到了a,原字符串是a1b2c3d4;
    // 在2的位置找到了b,原字符串是a1b2c3d4;2在4的位置找到了c,原字符串是a1b2c3d4;3在6的位置找到了d,原字符串是a1b2c3d4;4

str.search(reg)
str.split(reg,"")

未完待续。。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107261.html

相关文章

  • JS基础篇--正则表达式详解

    摘要:下面整理一些常用的正则表达式。正则表达式中可以使用编码。每个正则表达式可带有一个或者多个标注用以标明正则表达式的行为。其中表示匹配项在字符串中的位置,而表示应用字符串表达式的字符串。 正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。下面整理一些常用的正则表达式。 常用的正则字符 正则字符 描述 :将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向...

    shmily 评论0 收藏0
  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • 前端文档收集

    摘要:系列种优化页面加载速度的方法随笔分类中个最重要的技术点常用整理网页性能管理详解离线缓存简介系列编写高性能有趣的原生数组函数数据访问性能优化方案实现的大排序算法一怪对象常用方法函数收集数组的操作面向对象和原型继承中关键词的优雅解释浅谈系列 H5系列 10种优化页面加载速度的方法 随笔分类 - HTML5 HTML5中40个最重要的技术点 常用meta整理 网页性能管理详解 HTML5 ...

    jsbintask 评论0 收藏0

发表评论

0条评论

YanceyOfficial

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<