目标
来源
- 了解正则表达式语法
- 在 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 多行搜索