元字符真好玩
正则表达式真好玩, 上一篇中我们提及了元字符的概念,本篇带你了解更多元字符的内容,真好玩。
空白字符怎么匹配
在之前的内容我们要么是匹配字母,要么是匹配数字,亦或是匹配一些特殊的字符(通过转义),那一些空白字符我们该如何匹配呢?
比如换行,回车,Tab 键,删除等等,在实际需求中,我们可能需要去掉这些空白字符或者进行替换操作。
看本篇的标题可能就知道了,我们又会用到元字符,那么现在介绍一下关于空白元字符:
元字符 | 作用 |
---|---|
\n | 换行符 |
\r | 回车符 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等 |
\t | 制表符(Tab 键) |
\v | 垂直制表符 |
\f | 换页符 |
[\b] | 回退(并删除)一个字符(Backspace键) |
关于这个空白元字符比较常见的可能就是前三个了,大家能记下来是最好的,不能记的话还能回翻我的博客。
那么,现在来简单使用一下上述空白元字符吧,例子如下:
let str = 'There are really many front-end big guys';
let reg = /\s/g;
let res = str.match(reg);
console.log(res); // [' ', ' ', ' ', ' ', ' ', ' ']
这个例子比较简单,就是使用一下 \s
来匹配一下空白的字符,注意上述表格所说,会包括空格、制表符、换页符等等,等价于 [ \f\n\r\t\v]
。
同时还要注意 Unicode 正则表达式会匹配全角空格符。
而这个 Unicode 正则表达式是啥呢,可以给大家简单举例:
num.match('\u0661\u0662\u0663')
观察表格,回顾一下我们之前讲过的元字符,发现规律了吗,大部分的元字符都需要转义字符 \
,比如我们上述所使用的 \s
,如果没有转义操作,那么将只会匹配字符本身。
特殊字符怎么匹配
从上文到现在,我们已经学会了一些特定的匹配,对于任意字符呀,然后多个匹配,还使用了字符集合、空白字符等,但元字符的知识还不仅仅局限于此。
我们继续来看看吧,对于一些特殊字符,其实也并不特殊,可以说是更加简化的写法。
数字与非数字简化
在之前我们掌握可以通过 [0-9]
来简化 [0123456789]
的写法,那么现在再来教你一招,使用数字元字符。
元字符 | 作用 |
---|---|
\d | 等价于 [0-9] |
\D | 等价于 [^0-9] |
直接看例子吧,继续使用我们之前的例子:
\d
使用:
let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling'];
let reg = /[Ccyn]hoco\d/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) // ['choco1', 'choco2', 'nhoco3', 'yhoco6']
\D
使用
let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling', 'chocol'];
let reg = /[Ccyn]hoco\D/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) // ['chocol']
字母数字与非字母数字的简化
看标题可能比较拗口,直接看下述表格举例吧:
元字符 | 作用 |
---|---|
\w | 等价于 [a-zA-Z0-9_] |
\W | 等价于 [^a-zA-Z0-9_] |
\w
会匹配字母和数字,并且还会包括下划线,这个值得注意,下划线可以匹配得到。
\W
就是与上述相反。
\w
使用:
let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling', 'chocol'];
let reg = /\whoco\D/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) // ['chocol']
\W
使用:
let arr = ['C++','JAVA','PHP','JS'];
let reg = /[Cc]\W\W/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) // ['C++']
空白字符与非空白字符
这个其实在上文中就有给大家提及过,在这里就只通过表格给大家展示了:
元字符 | 作用 |
---|---|
\s | 等价于 [\f\n\r\t\v] ,代表空白字符 |
\S | 等价于 [^\f\n\r\t\v] ,代表非空白字符 |
进制的匹配问题
想必大家也会遇到一些算法题,可能会需要匹配进制,然后将某个进制转化等等,比较常见的就是十六进制、八进制等。
那么在这里来举例来说明一下:
十六进制的表示通过前缀 \x
来表示,我们可以试着玩玩:
console.log('Choco\xA0late') // Choco late
console.log('Choco\xAClate') // Choco¬late
console.log('Choco\xFClate') // Chocoülate
console.log('Choco\xBClate') // Choco¼late
console.log('Choco\xABlate') // Choco«late
而八进制的表示通过前缀 \0
来表示,我们也可以试着玩玩:
console.log('Choco\011late') // Choco late
console.log('Choco\00late') // Chocolate
console.log('Choco\061late') // Choco1late
console.log('Choco\071ate') // Choco9ate
console.log('Choco\066late') // Choco6late
小结
不知不觉已经坚持输出第三篇博客了,希望继续努力更新完整个系列~
本小节内容到底就结束啦,感谢各位的阅读,我们期待下一篇吧。