资讯专栏INFORMATION COLUMN

熟练掌握这十种字符,你的正则表达式就没问题

liangzai_cool / 992人阅读

摘要:元字符代表一类字符元类字符有或者的意思。里还可以有数字大小写字母。比如输出量词量词是用来修饰字符的。

元字符 [ ]

[ ] 代表一类字符(元类字符), [ ]有或者的意思,。比如[abc],意思就是a或b或c。 [ ]里还可以有数字.大小写字母。比如[0-9a-zA-Z]

 var str="diauhvvdai";
       var reg=str.replace(/[ha]/g,"xx");
       console.log(reg);//输出dixxuxxvvdxxi   
量词 {}

量词是用来修饰字符的。

{m} m位数
{m,n} m位数-n位数
{m,} m及m以上位数
+ {1,} 1位及1位以上
* 任意
? 0或1位

 var str="123 38658 395 38726 34324";
       var reg=str.match(/d{2,5}/g);
       console.log(reg);//输出["123", "38658", "395", "38726", "34324"]尽可能匹配更多的字符(贪婪模式)
       console.log(/a?/.test(str));//输出true
贪婪模式

贪婪模式

 var str="123 38658 395 38726 34324";
       var reg=str.match(/d{2,5}/g);
       console.log(reg);//输出["123", "38658", "395", "38726", "34324"]尽可能匹配更多的字符(贪婪模式)  

非贪婪模式 (?)

 var str="123 38658 395 38726 34324";
       var reg1=/d{3,}?/g; 
       console.log(str.match(reg1))      
       
分支 分组 引用

分支 | 或者的意思 [ab]相当于(a|b)

var str="dskj lsdk dslknv lksn";
       var reg=str.match(/skj|sdk/g);
       console.log(reg);//输出["skj", "sdk"]

       var reg1=/dskj|lsdk/g; 
       console.log(str.match(reg1));//输出["dskj", "lsdk"]    
         

分组 ()

忽略分组 ?:

  var str1=`
       2017-08-25
       hdbh-12-12
       1234/11/21
       2019/211/12
       2134-12-122`;//模板字符串

       var reg2=/(d{4})[-/](dd)(?:-|/)(d{2})[^0-9]/g;
       console.log(str1.match(reg2));
        console.log(str1.replace(reg2,"$2月$3日$1年"));

       /* 输出["2017-08-25↵", "1234/11/21↵"]
 
       08月25日2017年       hdbh-12-12
       11月21日1234年       2019/211/12
       2134-12-122
       */  

引用 $1.$2,... (引用的就是分组的内容)
上一个例子用的$1,$2,$3就是引用

边界问题

^$ (整个字符串用^开头,用$结尾)

单词的边界 b
非单词的边界 B

/^d{11}$/   手机号     


前瞻

正向前瞻 reg(?=assert) assert断言

反向前瞻 reg(?!assert)

  var str="Hi Hello Hew Hz  Hv";
      var reg=/H(?=i|z)/g;
      console.log(str.replace(reg,"h"));//输出hi Hello Hew hz  Hv

      var reg1=/H(?!e)/g;
      console.log(str.replace(reg1,"h"));//输出hi Hello Hew hz  hv

###正则对象的属性

lastIndex 最后匹配的索引

reg.flags 修饰符(igm)
reg.global
reg.ignoreCase
reg.multiline
reg.source 正则里的内容

   var str="ab dbn ubd";
       var reg=/b/g;
       console.log(reg.test(str));//输出2
       console.log(reg.lastIndex);//输出ture
       console.log(reg.test(str));//输出5
       console.log(reg.lastIndex);//输出ture
       console.log(reg.test(str));//输出9
       console.log(reg.lastIndex);//输出ture
       console.log(reg.test(str));//输出0
       console.log(reg.lastIndex);//输出false    
       
       console.log(reg.flags)  //输出g   修饰符(igm)
       console.log(reg.global)  //输出ture
       console.log(reg.ignoreCase) //输出false
       console.log(reg.multiline)  //输出false
       console.log(reg.source)  //输出b   正则里的内容  
正则表达式的使用

test 用来查看是否存在,有则输出ture,没有则输出false

exec 只找第一个
返回值:如果没有找到匹配返回null,如果找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex

complie 用来修改正则

var str="ab dbn ubd dsjh dskj";
       var reg=/[a-z]+/g;
       console.log(reg.test(str));//输出ture
       console.log(reg.exec(str));//输出"dbn"
       reg.compile("[a-z]+","i");
       console.log(str.search(reg));//输出0  
  
字符串的方法

search("")//结果为>-1则有该字符串,为-1时则没有

split("-")//"2017-8=24" 结果为["2017","8","24"]

match 返回值:如果没有找到匹配返回null,如果找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex,input包含了查找的字符串,index属性包含了整个被查找字符串中被匹配的子字符串的位置,lastIndex属性中包含了最后一次匹配中最后一个字符的下一个位置

replace("is","Is")//将"is"替换成"Is",只能替换1次,想替换n次,则写n次。

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

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

相关文章

  • 十步零基础JavaScript学习路径

    摘要:之前写过一篇天学通前端开发,内容主要讲的就是前端学习路径,今天再来写一篇零基础的学习路径,希望能帮编程零基础的前端爱好者指明方向。十框架三选一,零基础的初学者强烈推荐,如果是后台转前端推荐,如果技术型前端,推荐。 之前写过一篇26天学通前端开发,内容主要讲的就是前端学习路径,今天再来写一篇零基础的JavaScript学习路径,希望能帮编程零基础的前端爱好者指明方向。 一、开发环境和Ja...

    incredible 评论0 收藏0
  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。 开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研...

    罗志环 评论0 收藏0
  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研发体系...

    isaced 评论0 收藏0

发表评论

0条评论

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