今天在一本书《Javascript for impatient programmers》上看到写的是这样用

match(regExp: string | RegExp): RegExpMatchArray | null

上面用的是类Typescript的写法来说明,个人觉得挺好的
意思是match方法接受传递一个参数regExp,这个regExp可以字符串或者正则表达式。返回的正则匹配后的结果的数组,如果什么也没匹配到的话,返回的就是null
并且有如下说明

If regExp is a regular expression with flag /g not set, then .match()returns the first match for regExp within the receiver. Or null if there is no match. If regExp is a string, it is used to create a regular expression before performing the previous steps.

里面提到如果传递的参数regExp是一个字符串的话,match方法会先把它变成正则表达式(即new RegExp(regExp))然后在按照证明表达式进行匹配,此时相当于执行的是recevier.match(new RegExp(regExp))了。
为了进一步确认,我去查看了MDN,看到是这么说的

语法:str.match(regexp)
参数:regexp
A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj). If you don't give any parameter and use the match() method directly, you will get an Array with an empty string:[""].
针对上面说的如果传字符会先转为正则表达式后再匹配的说法是一致的。

我自己写了写代码测试下

我们可以看到传递字符串.v和传递/.v/是一样的,果然是转化为正则表达式后再执行的
我又接着测试了点别的

第二个为什么返回null了,不是应该也变成/\w{2}v/再进行匹配的吗
我接着用
'love'.match('\\w{2}v')试了下
好了,完美~

原因如下

原来是一个\会被转义,只是一个\是不行的,两个\就搞定了。
在此,String.prototype.match就讲完了。
在实际使用的过程中我们应该按照传递正则表达式来使用,为什么?不然像上面的传递个字符串.v,你自己还以为是匹配一个小数点.和一个v呢,实际结果是一个除换行符以外的任意字符和一个v,和你原来预想不一样。
我们平时还有几个方法样式可以传递字符串或者正则表达式,比如replace等,大家自行试试吧。
码字手疼,Over。


发表评论