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

Posted 一百个Chocolate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速掌握正则表达式 | 03 元字符真好玩相关的知识,希望对你有一定的参考价值。

元字符真好玩

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

空白字符怎么匹配

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

比如换行,回车,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

小结

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

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

以上是关于快速掌握正则表达式 | 03 元字符真好玩的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

快速掌握正则表达式 | 02 掌握进阶的匹配操作

快速掌握正则表达式 | 02 掌握进阶的匹配操作

快速掌握正则表达式 | 01 掌握最基本的匹配