[关闭]
@EncyKe 2016-10-26T02:45:45.000000Z 字数 2449 阅读 1501

手记:正则表达式入门

#手记



1. 正则表达式基本语法

1.1. 元字符

元字符
即 metacharacter,匹配某一类型的字符
元字符 匹配说明
. 匹配除换行符以外的任意字符
\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 匹配垂直制表符

1.2. 限定符

限定符
指定数量的代码
限定符 匹配说明
==== 贪婪算法 在数量上将尽可能多地匹配
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{<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 以外的字符
|

1.3. 分组

分组 匹配说明
==== 捕获
(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) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

1.4. 其它语法

语法 匹配说明
\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

2. 正则表达式 JS 使用

2.1. RegExp 的修饰符及基本使用

  1. var patt = /abc/gim;

或者

  1. var patt = RegExp('abc', 'gim');

2.2. RegExp 对象方法

2.3. String 对象的正则支持方法

3. 常用正则匹配示例

3.1. 匹配汉字

  1. [\u4e00-\u9fa5]

3.2. 匹配双字节字符

  1. [^\x00-\xff]

3.3. 匹配 email 地址

  1. \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

或者:

  1. ^[-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})?$

3.4. 匹配网址

  1. [a-zA-z]+://[^\s]*

3.5. 匹配 IP

  1. ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

3.6. 匹配电话号码

中国大陆手机号码:

  1. ^1\d{10}

中国大陆电话号码:

  1. ^(\(\d{3,4}\)|\d{3,4}-?)\d{7,8}$

附:参考

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注