[...]中括号在正则表达式里面也是一个非常常用的知识点,它的主要作用是设置一个集合范围。

一:集合
[abc]在正则表达式里表示一个包含a或者b或者c的集合,匹配三者之中的任意一个。注意元素之间不用空格和逗号隔开,因为在正则表达式里,[]里的空格或者逗号也会被判定为一个匹配元素。
来看一个例子:

let reg = /1[abc]2/g;
'1a2'.match(reg); //["1a2"]
'1b2'.match(reg); //["1b2"]

上面的正则表达式需要匹配的是数字1和2之间为a,b,c三者中的任意一个。所以‘1a2’, '1b2'都可以匹配。
再看下面一个例子:

let reg = /1[abc]2/g;
'1abc2'.match(reg); //null

仍然是上面的正则表达式,但是‘1abc2’是不匹配的。这里要注意的一点就是[...]里面的元素,当只有出现其中的任意一个时才能匹配,可以理解为[...]里面的元素只占一个位置。我们这里的abc占了三个位置,是不匹配我们给出的正则的。

二:范围
[1-9]表示数字1到9之间任意一个数字,[a-z]表示a到z之间的任意一个小写字母。在[]里用连字符(-)链接一个范围的两边,就能用来表示一个范围。

let reg = /[1-9][a-z]/g;
'5d'.match(reg); //["5d"]
'd1'.match(reg); // null

三:集合和范围之外

[^]当我们在中括号里的元素前加上一个^,就表示匹配除此之外的元素。

 [^abc] 除了'a','b', 'c'之外的任意字符
 [^0-9] 除了数字之外的任意字符,等同于 \D
 [^\s] 除了空格之外的任意字符,等同于 \S

看一个例子:

let reg = /[^0-9a-z]/ig;
'nana123@gmail.com'.match(reg); //["@", "."]

这里我们需要匹配除了字母和数字之外的字符,所以我们匹配到了"@"和"."这两个字符。

四:[...]里的元字符
我们知道元字符都有特色的含义与作用,比如".", "+", "?", "()"等,如果我们要把他们作为普通字母匹配,需要用""转义。例如,如果我们要匹配".", 需要用到"."。但是当他们出现在[]里面的时候,就失去了他们特色的作用,就做回了自己本身,也不需要再用后斜杠转义。

但是前面我们也讲到^出现在[]内部最前面,还有"-"出现在[a-z]这种情况下,还是有特殊意义的。那么当^不出现在[]内部最前面,还有"-"不出现在[a-z]这种情况下,他们也就是自己本身。例如:

let reg = /[-().^+]/g;
"1 + 2 - 3".match(reg); //["+", "-"]

这里的"^"和"-"都只是字符本身,所以我们能匹配到["+", "-"]。
当然如果在[]里面给这些元字符转义加上"",也不会有错,依然能匹配得到。


nanaistaken
586 声望43 粉丝