当前位置: 首页 > Web前端 > JavaScript

学习使用

时间:2023-03-27 00:16:06 JavaScript

正则表达式的六大规则内容:1.什么是正则表达式2.字符理解3.循环与重复4.位置边界5.子表达式6.逻辑处理1.什么是正则表达式以上是一个工具用于字符串模式匹配,实现字符串的查找和替换功能。我们从它的名字就可以看出,它是用来描述某种规则的一种表达方式。我们要学习的是它内部的查找替换功能。至于它的底层实现机制,我们就不赘述了。2.字符理解正则表达式基本上是由各种字符组成的,分为字符和元字符:字符:是计算机的基本字符编码。通常,正则表达式中使用数字和英文字母。元字符:用于表示特殊语义的字符。比如^表示不是,|手段或等等。正则表达式就是由这两个字符组成的各种实际规则。2.1单字符匹配最简单的正则表达式由数字和字母组成。如果我想匹配'banana'中的字符'b',那么我可以直接使用正则表达式/b/,但是如果我们使用/a/,则会匹配所有'a'字符。但是如果我们要匹配特殊字符,比如'*',它本身就是一个特殊字符,就需要对字符\进行转义,让这个特殊字符失去原来的意义。/\*/是匹配字符'*'。我们还可以使用\使不是特殊字符的字符具有特殊含义。例如,当我们要匹配空格、换行、回退等符号时,可以使用下表来记忆:2.2多个字符一对一匹配单个字符,也就是说只能有一个结果匹配,这显然是不够用的。正则表达式还引入了一个集合区间和通配符来实现一对多的匹配,即一个正则表达式匹配多个不同的字符。设置的区间用[]表示,如:/[123]/可以匹配字符串中所有的123个字符。可以使用元区间-来表示设置区间的范围,例如:/[0-9]/可以匹配字符串中的所有数字,/[a-z]/可以匹配所有英文小写字母。另外,正则表达式还派生了一批简单而特殊的匹配区间的正则表达式,如下:3.循环和重复以上是关于一对一和一对多的字符匹配,我们接下来要做的这里要说的是匹配字符规则。所谓同时匹配多个字符,就是控制某个字符在正则表达式中出现的次数。出现次数分为:0次、1次、无数次、固定次数。3.1匹配0维或1维字符'?'表示匹配前面的字符0次或1次,如:正则表达式/colou?r/可以同时匹配字符串'color'和'colour',即'u'可以出现0次或1次。3.2匹配0个或多个元字符'*'用于匹配0个字符或无数个字符。3.3Match1ormoremeta-characters'+'适用于匹配同一个字符1次或多次。3.4匹配特定数量的元字符'{}'可以匹配特定数量的字符,比如:/b{3}/表示我要匹配3个连续的b,它还有其他派生规则:-{x}:xtimes-{min,max}:在mintimes和maxtimes之间-{min,}:至少mintimes-{0,max}:maximummaxtimes最后总结一下loops和repetitions的匹配:4.PositionBoundaries所谓位置边界匹配,就是在一个长文本字符串中限制要查找的字符位置的条件。比如我们只想查找单词开头或结尾的字符等。4.1单词边界单词边界只匹配单个单词。更常见的场景是匹配特定文章或句子中的特定单词。例如:猫把食物撒得到处都是。如果我使用/cat/来匹配文章中的单词,最后的匹配将多余地匹配单词'scattered'。这时候我们用特殊字符\b把我们要设置边界的词包起来,比如:/\bcat\b/,这样就只能匹配到'cat'这个词了。4.2StringBoundary上面是匹配单词,但是有时候我们需要匹配整个字符串,怎么办呢?元字符“^”可用于匹配字符串的开头。元字符“$”可用于匹配字符串的结尾。另外,要匹配整个字符串,需要避免换行符的干扰,这就需要在正则表达式的末尾加上字母'm',也就是多行模式。比如我要匹配下面的文字'Iamtherainman':直到那天,他终于告诉我,'Iamtherainman'会用正则表达式/^Iamtherainman$/米。除了多行模式,正则匹配还有其他的匹配模式。最后,这部分内容整理如下:5.上面说的子表达式是最基本的字符匹配内容,接下来要说的是正则子表达式。它的核心思想是将正则表达式复杂化。正则表达式从简单到复杂的演变通常采用分组、反向引用和逻辑处理的思想。使用这三个规则,可以推导出无限复杂的正则表达式。5.1.分组分组是子表达式的核心思想。其原理是:将'()'所包含的正则表达式作为一组子表达式,将多个'()'所包含的子表达式组合成复杂的正则表达式表达式。5.2.后向引用所谓后向引用,就是后面的子表达式重用了前面匹配过的子串。可以理解为变量使用。它的使用方法如下:\1、\2分别代表引用的第一个和第二个子表达式。\0表示整个表达式。反向引用常用于替换字符串,用'$1''$2'表示要替换的字符串,如下:letstr='cadcaegg'letstr1=str.replace(/(ca)d/g,'$1??e')console.log(str1);//caecaegg等价于:letstr1=str.replace(/(ca)d/g,'cae')有时候我们想限制回溯引用范围的应用,可以通过正向/反向查找来实现。正向查找用于限制后缀,通过(?=regex)的子表达式形式限制后缀的内容,实现正向查找。比如:happyhappy这两个词,如果我想得到happy开头的副词,可以用happ(?=ily)来匹配。通俗的理解就是将'happ'部分与后缀'ily'进行匹配,具体见如下代码:letstr='happyhappyly'letstr1=str.replace(/happ(?=ily)/,'haha')控制台.log(str1);//happyhaha??ilylookbehindLookbehind(lookbehind)是指定一个子表达式,然后从匹配子表达式的位置开始,查找符合规则的字符串。比如:applepeople这两个词,我只想匹配apple'sple,怎么实现呢?/(?<=app)ple/其实它的原理和正向相反,我们看例子:letstr='happysyppy'letstr1=str.replace(/(?<=sy)ppy/,'哈哈')console.log(str1);//happysyhaha这里最重要的一点要记住:括号内的条件,括号外匹配替换什么!最后回顾一下这部分:6.逻辑处理所谓逻辑处理,就是指三种逻辑关系,与或非。其中,只讨论or和non的关系。或关系,通常用于子表达式分类。例如,如果我同时匹配a和b,我可以使用像(a|b)这样的子表达式。而不是关系,有两种情况:一种是字符匹配,一种是子表达式匹配。1)字符匹配:表示不需要元字符^。只有[和]中使用的^表示非关系。2)子表达式匹配:对于非关系,需要前面介绍的前向否定搜索子表达式(?!regex)或反向否定搜索子表达式(?