资讯专栏INFORMATION COLUMN

正则表达式之小有名气

dreamtecher / 1561人阅读

摘要:本来想把一些预定义字符类写完的,转念一想灌输太多内容是不利于学习的,而且那些东西也并不是很重要,只是用的时候现查的一些字母而已。所以留到下章再说

在上一篇文章已经讲了如何匹配简单的字符串,如何全局搜索,以及一些特殊字母i,g,m所代表的含义
这篇文章讲的内容有点多最好分两次读,不过不用担心很多东西并不需要你特意记住
知道有那么一回事先用先查都OK

再谈^和$
之前已经了解过1表示除a,b,c之外的字符,现在又要多一种用法了
/^test/  表示以test开头的字符 这里的^表示以...开头
那么$表示什么呢? 它的含义是以...结尾
/test$/ 表示以test结尾的字符
转义
首先我们要知道并不是所有的字符都与自身等价的,比如/hello/表示我们要匹配‘hello’字符,但是如果想匹配food$并不能这么写/food$/,因为$有独特的含义,就像我们上篇文章学到的[],^这几个符号一样。如果想要匹配"food$"这个字符串,那就需要用反斜杠进行转义,通俗的说就是在特殊符号前面加上 就像这样
/food$/ 匹配food$字符
从webpack配置学正则
我copy了一段webpack配置,只看rules中test表示的正则就可以
在正则中.也有特定的含义,所以如果把它当字符进行匹配的话也要进行转义根据上面所学到的,判断下面代码中的正则表达式所代表的含义,答案我已经写在注释中了
module.exports = {
  module: {
    rules: [
      { test: /.css$/, use: "css-loader" },//以.css结尾的 使用css-loader处理
      { test: /.ts$/, use: "ts-loader" }// 以.ts结尾的
    ]
  }
};
重复匹配
如果要匹配四个‘a’字符,我们当然可以用/aaaa/这样表示,如果匹配5个"a" 10个"a"呢?正则没那么‘傻’早已为我们准备了简便方法/a{4}/ 表示匹配含有连续4个"a"的字符
在重复选项上,正则提供了很多方式

在一个字符后面加一个"?",可以定义该字符是可选的(可以出现一次或者根本不出现)

/t?est/  可以匹配 test 或者 est

如果一个字符要出现一次或多次(至少出现一次),可以使用加号"+"

/t+est/ 可以匹配test ttest tttest 而不能匹配est

如果一个字符要出现零次或多次,可以使用星号"" (注意与?的区别,?代表要么不出现要么只能出现一次 代表要么不出现要么出现不止一次)

/t*est/ 可以匹配test ttest tttest est

也可以在字符后面的花括号里指定一个数字来表示重复次数

/a{4}/ 匹配包含连续4个a的字符串

也可以在字符后面的花括号指定一个重复次数的区间

/a{4,10}/ 匹配任何含有连续4个至10个a的字符串

还可以在省略区间中第二个值(但是要保留逗号) 这里直接上代码,用文字叙述容易迷糊

/a{4,}/ 如果逗号后面不写第二个参数那么表示匹配任何含有连续4个或多于4个a的字符串
这些重复操作符可以是贪婪的可以是非贪婪的,默认情况它们是贪婪的
这里不用口语叙述,看代码更直观
遇到连续四个a即停止搜索
var str = "aaaabbbcaadda"
var newStr = str.replace(/a+/,"嘿")//"嘿bbbcaadda"
因为加了g进行全局匹配,我们看一看有哪些字符符合条件
开头的4个a
c后面的2个a
d后面的a
这就是贪婪匹配遇到成串的符合条件的字符,将匹配这个’串‘

var str = "aaaabbbcaadda"
var newStr = str.replace(/a+/g,"嘿")//"嘿bbbc嘿dd嘿"
如果后面在"+"后跟了"?"则表示进行非贪婪匹配,具体结果请看注释
var str = "aaaabbbcaadda"
var newStr = str.replace(/a+?/g,"嘿")//"嘿嘿嘿嘿bbbc嘿嘿dd嘿"
分组
上面已经说到可以用/t+est/这种用法,但是+只影响它前面的t,如果想让+影响多个字符可以使用括号进行分组
/(ab)+/ 匹配一个或多个连续出现的字符串"ab"
var str = "abcdababef"

var newStr = str.replace(/(ab)+/g,"嘿")//"嘿cd嘿ef"
请注意cd后的连续两个ab被替换成一个嘿而不是两个
"|"操作符
可以使用竖线表示或者
/a|b/ 匹配a或b字符

/(ab)+|(cd)+/ 匹配出现一次或多次的“ab” 或者“cd”
这一篇概念有点多,不需要一下看完,分两次看好了。本来想把一些预定义字符类写完的,转念一想灌输太多内容是不利于学习的,而且那些东西也并不是很重要,只是用的时候现查的一些字母而已。所以留到下章再说
  • abc ↩

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

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

    相关文章

    • 面试--js常见面试题

      摘要:可以由构造函数来访问到每个对象的属性指向自身构造函数的属性是原型对象的属性,指向这个原型对象所对应的构造函数。 引用文字 1、delete delete不可以删除变量 只可以删除变量上的属性 2、有名函数被赋值为一个变量 再访问这个 名(有名函数的名)就会报错 var f=function g() { return 1 } console(g()...

      yacheng 评论0 收藏0
    • JS 获得浏览器类型和版本

      摘要:获取浏览器类型和版本介绍完浏览器的信息,下面就是写正则来判断了根据关系进行判断从关系判断中,我们会发现判断的顺序很重要,原因是很多浏览器都是多核的。参考判断浏览器的方法总结判断浏览器类型及版本新增判断浏览器类型的方法总结欢迎访问我的博客。 最近碰到了一个问题,判断浏览器的类型,我们熟知的 IE, Firefox, Opera, Safari, Chrome 五款比较有名的浏览器,有时候...

      Tangpj 评论0 收藏0
    • 正则达式瑞士军刀

      摘要:瞎乎出品瞎乎第二期正则表达式之瑞士军刀正则表达式,这是一块硬骨头,很难啃,但是啃着又很香。正则表达式使用单个字符串来描述匹配一系列匹配某个句法规则的字符串。 瞎乎 出品瞎乎第二期:正则表达式之瑞士军刀 正则表达式(Regular Expression),这是一块硬骨头,很难啃,但是啃着又很香。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。很多地方我们都需要使用正...

      Mr_houzi 评论0 收藏0
    • js谜正则达式

      摘要:用正则表达式语言创建的。匹配非数字的字符使用元字符元字符在正则表达式中有特殊含义的字符。正则表达式默认是区别大小写的。正则表达式的字符串表示。若是一个正则表达式,若有标志则替换所有匹配之处,若没有则只替换第一个匹配之处。 前言 好久之前就说要写一篇正则表达式的文章,正则表达式总是记了又忘,忘了再记,记了再忘,卒。言归正传,今天终于要研究一下这个谜一样的正则表达式了。其实正则表达式并不难...

      wendux 评论0 收藏0

    发表评论

    0条评论

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