大家好,我是甜甜。今天要分享的是正则表达式Regex。一天中午,我正准备拿起手机打电话给王者荣耀,微信突然发来一条消息!有个网友打电话问我能不能帮忙解决一个字符串匹配的问题。我硬着头皮同意了,但是当我看到标题的时候。需要匹配检索的题目是:=A12/B14/D14.../H18=C12*D12*H16...*F19嗯,打开多年没碰的正则手册。初识Regex首先,快速介绍一下:正则表达式(也称为regex或regexp)只是一种模式,可用于匹配不同且通常特定的字符组合。我们可以使用这些模式来检查和处理字符串。如何检索它们,我们需要知道如何构造它们。创建正则表达式可能如下所示:letdog;rat=/dog/;rat=newRegExp("dog");如果我们有一个表达式,我们如何匹配它?当然,正则表达式有自己可用的方法,也可以在一些字符串方法中使用。例如,.test是一种可用于正则表达式的方法。它返回一个布尔值是否在字符串中找到正则表达式:letrat=/dog/;rat.test('Isawadog!');//returntrue/rat/.test('Isawadog!');//returntrue上面两种调用.test的方式是等价的:即可以用赋值给regexp的变量调用,也可以直接用regexp调用。这适用于任何正则表达式的使用。请务必注意,正则表达式匹配必须准确,包括任何换行符、大写字母和空格。例如:/dog/.test('Isawsomedogs!');//returnstrue/dog/.test('Meetatthebadog9');//returnsfalse/dog/.test('Ratsanddoihsarenotfriends');//returnsfalse看这里,确定不明白,为什么要用,不着急,往下看。特殊字符特殊字符是用于修改或指定正则表达式的字符组合的字符。最有用的特殊字符之一是方括号。方括号允许您指示目标字符串中的字符可以是任意数量的字符!让我们看看他们做了什么:constbt=/b[aeiou]t/;bt.test('bat');//returnstruebt.test('bet');//returnstruebt.test('bit');//returnstruebt.test('bot');//returnstruebt.test('but');//returnstruebt.test('bpt');//returnsfalse想一想,括号中的所有内容都对应着你要查找的字符串中的一个字符。在这个有用的功能之上,我们可以使用“-”字符来指定特定范围的字符!constnums=/[0-5]/;nums.test('0');//returnstruenums.test('3');//returnstruenums.test('7');//返回false同样,例如,要指定所有字母,您可以这样做:constletters=/[A-Za-z]/;letters.test('M');//returnstrueletters.test('y');//returnstrueletters.test('5');//returnsfalse另一个要记住的特殊字符是“+”字符。这表明特定元素可以重复任意次数。让我们看看它做了什么。constbomb=/boo+m/;bomb.test('boom!');//returnstruebomb.test('Boom!');//返回falsebomb.test('booooooooooooom!');//如果你想返回trueignorethesizeWritewhattodo,可以在后面加一个i。constbomb=/boo+m/i;bomb.test('boom!');//returnstruebomb.test('Boom!');//returnstruebomb.test('booooooooooooom!');//returnstruebomb.test('BOOOOOOOOOOOOM!');//returntrue比如我们常见的“?”字符也是一个有用的特殊字符。该字符表示可能包含也可能不包含前一个字符。constcolor=/colou?r/;color.test('color');//returnstruecolor.test('colour');//returnstrue可能还需要注意特殊字符“.”特点。这是一个通配符。A”。”可以表示任何其他字符,不包括换行符。constanything=/./;anything.test('a');//returnstrueanything.test('1');//returnstrueanything.test('[');//returnstrue嗯,先说一些基础的,大家看看在其他语法。其他语法\w"字符指代任何字母数字字符。它的反义词"\W"指代任何非字母数字字符。constalphaNumber=/\w/;alphaNumber.test('a');//returnstruealphaNumber.test('1');//returnstruealphaNumber.test('&');//returnsfalseconstnotAlphaNumber=/\W/;notAlphaNumber.test('a');//returnsfalsenotAlphaNumber.test('1');//returnsfalsenotAlphaNumber.test('&');//returnstrue再介绍一个,“\s”字符指任意空白字符,“\S”字符指任意非空白字符。constwhitespace=/\s/;whitespace.test('a');//returnsfalsewhitespace.test('1');//returnsfalsewhitespace.test('&');//returnsfalsewhitespace.test('');//returnstruewhitespace.test('\n');//returnstrueconstnotWhitespace=/\S/;notWhitespace.test('a');//returnstruenotWhitespace.test('1');//returnstruenotWhitespace.test('&');//returnsstruenotWhitespace.test('');//returnsfalsenotWhitespace.test('\n');//returnsfalse嗯,不能全部介绍,得自己查了,请问有总结图吗?这时候,当然有。千筹手册说明图这是第三方网站,建议结合这个,右边的语法参考基本就是上面的内容。https://c.runoob.com/front-end/854左边是调试,中间是语法参考,右边是控制台,是不是很美。解题匹配的格式为=A12/B12/C12.../K23中间是乘法。想了半天,首先,能不能把它分成三部分,一头,一尾,中部。一开始我们是不是可以这样匹配:reg=/^=[A-Z]+\d+/i;首先是=的开头,然后是字母,然后是数字。考虑到可能有一个或多个,我们不得不使用“+”特殊字符。然后我们看期望:reg.test('=b12')//truereg.test('=C12')//truereg.test('=CC3')//truereg.test('=CDdd35')//truereg.test('=CDdd35')//false好,我们来看看,tail部分怎么写://tail部分应该是/CC12,/B234,像这样reg=/(\/|\*)[A-Z]+\d+$/i首先考虑到可能是乘法和除法,所以就有了这么一个**(/|*)**。需要注意的是需要转义,然后以$结尾。reg.test('/cc')//falsereg.test('/cc12')//true剩下的就是中间部分,也就是有多个结构如:/B231,所以:reg=/((\/|\*)[A-Z]+\d+$)*/i最后组合起来,看起来像这样:constmultiplicationAndDivisionReg=/^=[A-Z]+\d+((\/|\*)[A-Z]+\d*$)*(\/|\*)[A-Z]+\d+$/i;'100000000.00'//输出'100,000,000.00'赶快试试吧。最后,今天的分享简单介绍下正则表达式Regex的入门方法,大家快来学习吧。
