Javascript 正则表达式
· 19 min read
- 在线编写和检验正则的网站:https://regex101.com 支持多语言切换
- freeCodeCamp: Introduction to the Regular Expression Challenges
基础概念
创建方式
构造函数
const regex = new RegExp('abc', 'i');
字面量
const regex = /abc/i;
修饰符
g:global,全文搜索,默认搜索到第一个结果停止搜索。i:insensitive,不区分大小写,默认大小写敏感。m:multiple line,多行搜索,更改^和$的含义,使它们分别在每行的行首和行尾匹配,默认是在整个字符串的开头和结尾匹配。s:single line,单行模式,此模式下.能匹配任意字符,包括换行符,默认是不包括的。
TODO
y:sticky,必须从上一次匹配成功的下一个位置开始(lastIndex),作用是达到^在全局匹配中都有效。u:unicode,用来正确处理大于\uFFFF的 Unicode 字符(对于大于\uFFFF的字,把 4 字节的字符当做单独 1 个字来解析,否则当做 2 个 2 字节的字),把\u{}当做 Unicode(否则当做正则内容)。默认按照 ES5 来处理字符,1 个字仅有 2 个字节。
元字符
大部分字符在正则表达式中,就是字面的含义,比如/a/匹配 a,/b/匹配 b。如果在正则表达式之中,某个字符只表示它字面的含义(就像前面的 a 和 b),那么它们就叫做“字面量字符”(literal characters)。
除了字面量字符以外,还有一部分字符有特殊含义,不代表字面的意思。它们叫做“元字符”(meta characters),先介绍以下几个:
| 元字符 | 符号 | 说明 |
|---|---|---|
| 选择类 | | | 或匹配,如 /x|y/ 正则可匹配 x 或 y 两个字符 |
| 选择类 | [] | 或匹配,如 [abcd] 代表一个字符,这个字符可以是 abcd 四个字符中的任意一个 |
| 范围类 | [0-9] | 0-9 中的任意一个字符 |