目标
来源
- 了解正则表达式语法
- 在 IDE 中使用正则表达式处理复杂的字符串查找、替换需求
- 在 JavaScript 程序设计中使用正则表达式处理字符串
什么是正则表达式
- Regular-Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
- 说简单了就是按照某种规则去匹配符合条件的字符串
通配符
REGEXPER
1
| ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$
|
REGEXPER
| reg | 解释 |
|---|
| 元字符 | |
. | 任意字符 |
\w | 匹配除换行符以外的任意字符 |
\s | 匹配字母或数字或下划线或汉字 |
\d | 匹配数字 |
\b | 单词边界 |
^ | 开头 |
$ | 结尾 |
| 字符转义 | |
\ | 转义 |
| 重复 | |
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复 n 次 |
{n,} | 重复 n 次或更多次 |
{n,m} | 重复 n 次到 m 次 |
| 字符类 | |
[] | 或 |
\d | [0-9] |
\w | [a-zA-Z0-9_] |
| 分支条件 | |
| ` | ` |
| *分组 | |
() | 分组 |
$1 | 获取分组 |
| 反义 | |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了 x 以外的任意字符 |
[^aeiou] | 匹配除了 aeiou 这几个字母以外的任意字符 |
| 贪婪与懒惰 | |
*? | 重复任意次,但尽可能少重复 |
+? | 重复 1 次或更多次,但尽可能少重复 |
?? | 重复 0 次或 1 次,但尽可能少重 |
{n,m}? | 重复 n 到 m 次,但尽可能少重复 |
{n,}? | 重复 n 次以上,但尽可能少重复 |
| 其他 | |
\a | 报警字符(打印它的效果是电脑嘀一声) |
\b | 通常是单词分界位置,但如果在字符类里使用代表退格 |
\t | 制表符,Tab |
\r | 回车 |
\v | 竖向制表符 |
\f | 换页符 |
\n | 换行符 |
\e | Escape |
\0nn | ASCII 代码中八进制代码为 nn 的字符 |
\xnn | ASCII 代码中十六进制代码为 nn 的字符 |
\unnnn | Unicode 代码中十六进制代码为 nnnn 的字符 |
\cN | ASCII 控制字符。比如、cC 代表 Ctrl+C |
\A | 字符串开头(类似^,但不受处理多行选项的影响) |
\Z | 字符串结尾或行尾(不受处理多行选项的影响) |
\z | 字符串结尾(类似$,但不受处理多行选项的影响) |
\G | 当前搜索的开头 |
\p{name} | Unicode 中命名为 name 的字符类,例如、p{IsGreek} |
(?>exp) | 贪婪子表达式 |
(?<x>-<y>exp) | 平衡组 |
(?im-nsx:exp) | 在子表达式 exp 中改变处理选项 |
(?im-nsx) | 为表达式后面的部分改变处理选项 |
(?(exp)yes|no) | 把 exp 当作零宽正向先行断言,如果在这个位置能匹配,使用 yes 作为此组的表达式;否则使用 no |
(?(exp)yes) | 同上,只是使用空表达式作为 no |
(?(name)yes|no) | 如果命名为 name 的组捕获到了内容,使用 yes 作为表达式;否则使用 no |
(?(name)yes) | 同上,只是使用空表达式作为 no |
REGEXP 对象
JavaScript 通过内置对象 RegExp 支持正则表达式
有两种方式实例化 RegExp 对象
1 2 3
| var reg = /\bis\b /g; 'He is a Boy. This is a boy. Where is she'.replace(reg,'IS')
|
1
| var reg = new RegExp('\\bis\\b','g')
|
标识符
- g:global 全文搜索,不添加,搜索到地一个匹配停止
- i:ignore case 忽略大小写,默认大小写敏感
- m:multiple lines 多行搜索