js正则表达式小结
...大约 3 分钟
正则表达式是一种用来匹配字符串中的字符组合的模式。常用来做参数验证、字符匹配、字符查找及字符替换。由于总是零星的记一些规则,又总是会忘,所以就打算简单的总结一下,以便后续可以查阅以及整理。
文中以javascript中的正则来介绍。
创建正则表达式
js中有两种方式来定义正则表达式。 正则表达式字面量
const re = /pattern/attributes;
正则表达式字面量在脚本加载后编译。若你的正则表达式是常量,使用这种方式可以获得更好的性能。 使用RegExp对象的构造函数
const re = new RegExp(pattern, attributes);
使用构造函数,提供了对正则表达式运行时的编译。当你知道正则表达式的模式会发生改变, 或者你事先并不了解它的模式或者是从其他地方(比如用户的输入),得到的代码这时比较适合用构造函数的方式。
使用 new RegExp 的时候需要对 \ 进行转义。而字面量不需要。 使用new RegExp对象每次都会重新创建变量。
attributes为修饰符。有i、g和m三个值。
i: 忽略大小写匹配
g: 全局匹配(查找所有匹配而不是匹配一个停止)
m: 多行匹配
元字符
正则表达式有一些字符具有特殊的用途,称为元字符。 常见有如下一些元字符:
^ 字符串开头
$ 字符串结尾
. 匹配任何一个除换行和行结束符的字符
[] 定义一个字符集合,可以是中括号内的任意一个字符。可以使用 - 来定义一个范围,如[a-z]。
[^xyz] 反向字符集,匹配任何不在中括号中的一个字符。
转义字符
\n : 换行符
\r : 回车符
\t : 制表符
\0 : 空字符
\w : 匹配单词字符
\W : 匹配所有非单词字符
\d : 数字
\D : 非数字
\s : 空白字符
\S : 非空白字符
\b : 单词边界
\B : 非单词边界
量词
+ : 1个或多个字符
* : 0个或多个字符
? : 0个或1个字符
{x} : x个字符
{x,y} : x到y个字符
{x,} : 至少x个字符
分组和反向引用
可以使用()来将若干字符分组。使用分组匹配的字符将会被暂存起来,可以使用\n(n为第几个分组)来进行反向引用。
//使用分组和反向引用
/(hello)\1/ // 可以匹配hellohello
// 不缓存分组
(?:分组内容) // 使用?:来取消缓存分组内容
参考
[1] MDN 正则表达式 [2] w3cschool正则表达式 [3] 一起来啃犀牛书:正则表达式
Powered by Waline v3.0.0-alpha.9
预览: