• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

快速掌握正则表达式 | 03 元字符真好玩

互联网 diligentman 3小时前 2次浏览

元字符真好玩

正则表达式真好玩, 上一篇中我们提及了元字符的概念,本篇带你了解更多元字符的内容,真好玩。

空白字符怎么匹配

在之前的内容我们要么是匹配字母,要么是匹配数字,亦或是匹配一些特殊的字符(通过转义),那一些空白字符我们该如何匹配呢?

比如换行,回车,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 来匹配一下空白的字符,注意上述表格所说,会包括空格、制表符、换页符等等,等价于 [ fnrtv]

同时还要注意 Unicode 正则表达式会匹配全角空格符。

而这个 Unicode 正则表达式是啥呢,可以给大家简单举例:

num.match('u0661u0662u0663')

观察表格,回顾一下我们之前讲过的元字符,发现规律了吗,大部分的元字符都需要转义字符 ,比如我们上述所使用的 s,如果没有转义操作,那么将只会匹配字符本身。

特殊字符怎么匹配

从上文到现在,我们已经学会了一些特定的匹配,对于任意字符呀,然后多个匹配,还使用了字符集合、空白字符等,但元字符的知识还不仅仅局限于此。

我们继续来看看吧,对于一些特殊字符,其实也并不特殊,可以说是更加简化的写法。

数字与非数字简化

在之前我们掌握可以通过 [0-9] 来简化 [0123456789] 的写法,那么现在再来教你一招,使用数字元字符。

元字符 作用
d 等价于 [0-9]
D 等价于 [^0-9]

直接看例子吧,继续使用我们之前的例子:

d 使用:

let arr = ['choco1','choco2', 'nhoco3', 'yhoco6', 'hearling'];
let reg = /[Ccyn]hocod/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]hocoD/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 = /whocoD/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) //  ['chocol']

W 使用:

let arr = ['C++','JAVA','PHP','JS'];
let reg = /[Cc]WW/g;
let res = arr.filter(item=>item.match(reg));
console.log(res) //  ['C++']

空白字符与非空白字符

这个其实在上文中就有给大家提及过,在这里就只通过表格给大家展示了:

元字符 作用
s 等价于 [fnrtv],代表空白字符
S 等价于 [^fnrtv],代表非空白字符

进制的匹配问题

想必大家也会遇到一些算法题,可能会需要匹配进制,然后将某个进制转化等等,比较常见的就是十六进制、八进制等。

那么在这里来举例来说明一下:

十六进制的表示通过前缀 x 来表示,我们可以试着玩玩:

console.log('ChocoxA0late') // Choco late
console.log('ChocoxAClate') // Choco¬late
console.log('ChocoxFClate') // Chocoülate
console.log('ChocoxBClate') // Choco¼late
console.log('ChocoxABlate') // Choco«late

而八进制的表示通过前缀 来表示,我们也可以试着玩玩:

console.log('Choco11late') // Choco	late
console.log('Choco0late') // Chocolate
console.log('Choco61late') // Choco1late
console.log('Choco71ate') // Choco9ate
console.log('Choco66late') // Choco6late

小结

不知不觉已经坚持输出第三篇博客了,希望继续努力更新完整个系列~

本小节内容到底就结束啦,感谢各位的阅读,我们期待下一篇吧。


程序员灯塔
转载请注明原文链接:快速掌握正则表达式 | 03 元字符真好玩
喜欢 (0)