@EncyKe
2016-10-26T02:45:45.000000Z
字数 2449
阅读 1909
#手记
元字符 | 匹配说明 |
---|---|
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母 (a~z/A~Z) 或数字 (0~9) 或下划线 (_) |
\W |
匹配任意不是字母,数字,下划线的字符,即非\w |
\s |
匹配任意的空白符 (Space、Tab、换页、换行) |
\S |
匹配任意不是空白符的字符,即非\s |
\d |
匹配数字 (0~9) |
\D |
匹配除数字 (0~9) 外的其它字符,即非 \d |
\b |
匹配单词的开始或结束,零宽单词边界 |
\B |
匹配不是单词开头或结束的位置,即非 \b |
^ |
匹配字符串的开始,可以是行首或句首 |
$ |
匹配字符串的结束,可以是行末或句末 |
\t |
匹配 Tab |
\r |
匹配 Enter |
\n |
匹配换行符 |
\f |
匹配换页符 |
\v |
匹配垂直制表符 |
限定符 | 匹配说明 |
---|---|
==== | 贪婪算法 在数量上将尽可能多地匹配 |
* |
重复零次或更多次 |
+ |
重复一次或更多次 |
? |
重复零次或一次 |
{<n>} |
重复 n 次,n 为数字 |
{<n>, } |
重复 n 次或更多次 |
{<n>, <m>} |
重复 n 到 m 次 |
==== | 懒惰算法 在数量上将尽可能少地匹配 |
*? |
重复零次或更多次 |
+? |
重复一次或更多次 |
?? |
重复零次或一次 |
{<n>}? |
重复 n 次,n 为数字 |
{<n>, }? |
重复 n 次或更多次 |
{<n>, <m>}? |
重复 n 到 m 次 |
[] |
自定义所需的字符集合,可以直接写入字符,也可用 - 连接范围,如 [a-z] |
[^] |
字符范围以外,如 [^aeiou] 表除 a、e、i、o、u 以外的字符 |
| |
或 |
分组 | 匹配说明 |
---|---|
==== | 捕获 |
(exp) |
匹配 exp, 并捕获文本到自动命名的组里 |
(?exp) |
匹配 exp, 并捕获文本到名称为 name 的组里,也可自定义 name,如:(?'name'exp) 或 (?<name>exp) |
(?:exp) |
匹配 exp, 不捕获匹配的文本,也不给此分组分配组号 |
==== | 零宽断言 |
(?=exp) |
匹配 exp 前面的位置 |
(?<=exp) |
匹配 exp 后面的位置 |
(?!exp) |
匹配后面跟的不是 exp 的位置 |
(?<!exp) |
匹配前面不是 exp 的位置 |
==== | 引用分组 |
\<n> |
引用分组所匹配到的字符串,数字表上下文次序 |
\k<name> |
引用自定义 name 的分组 |
==== | 注释 |
(?#comment) |
这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
语法 | 匹配说明 |
---|---|
\a |
报警字符 (打印它的效果是电脑嘀一声) |
\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 |
`(?(name)yes | no)` |
(?(name)yes) |
同上,只是使用空表达式作为 no |
g
:global,全局匹配;i
:ignoreCase,不区分大小写;m
:multiline,跨行匹配;
var patt = /abc/gim;
或者
var patt = RegExp('abc', 'gim');
test()
:返回匹配结果 true | false
;exec()
:返回匹配内容;match()
:返回匹配的字符串数组;replace()
:替换原字符串中的匹配字符;split()
:按匹配字符切割原字符串为字符串数组;search()
:返回匹配字符在原字符串中的首个索引值;
[\u4e00-\u9fa5]
[^\x00-\xff]
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
或者:
^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$
[a-zA-z]+://[^\s]*
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
中国大陆手机号码:
^1\d{10}
中国大陆电话号码:
^(\(\d{3,4}\)|\d{3,4}-?)\d{7,8}$