首页 > 代码库 > 入门正则表达式

入门正则表达式

正则表达式

1.概念

正则表达式是一种含有某种规则的模式,被用来检索、替换符合给定模式的文本。

全称为 Regular Expression,在 JavaScript 中简写为 RegExp。

 

2.字符

常用的元字符如下:

\              转义符,例如匹配符号"*",则要写成"\*"。因为有些特殊字符是元字符,有特定含义,所以在匹配这些特殊符号时,要在符号前加 \ 。特殊符号比如 \ ^ $ . * + ? 等。

^             匹配行或字符串的起始位置。

$             匹配行或字符串的结尾位置。

             (点号)匹配除换行符之外的任何单个字符

\w           匹配包括下划线的任何单词字符(匹配字母、数字、下划线或汉字)。

\s            匹配任意空白字符。

\d            匹配一个数字字符。

\b            匹配单词的开始或结束位置。

[xyz]       字符集合,匹配所含的任意一个字符,等价于下面的 [a-z]

[a-z]        字符范围,匹配指定范围内的任意字符

 

反义,顾名思义,就是相反的意思,对照着上面最后几个元字符看。

\W           (注意是大写字母)匹配任何非单词字符(匹配不是字母、数字、下划线或汉字的字符)。

\S            注意是大写字母匹配任何非空白字符。

\D            注意是大写字母匹配一个非数字字符。

\B            注意是大写字母匹配不是单词开始或结束的位置。

[^xyz]     负值字符集合,匹配未包含的任意字符。

[^a-z]     负值字符范围,匹配任何不在指定范围内的任意字符。

 

限定符

*             匹配前面的子表达式0次或多次。

+            匹配前面的子表达式1次或多次。

?             匹配前面的子表达式0次或1次。

{n}         n为非负整数,是一个确定的数字,匹配前面的子表达式n次。

{n,}        n为非负整数,是一个确定的数字,匹配n次或多次。

{n,m}     n和m均为非负整数,都是确定的数字,匹配最少n次,最多m次。

 

      贪婪量词

      *、+、?  限定符都是贪婪的,它们会尽可能多地匹配文字,在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

      *?           匹配多次,尽可能少匹配

      +?          匹配1次或多次,尽可能少匹配

      ??           匹配0次或1次,尽可能少匹配

     {n,}?       n为非负整数,是一个确定的数字,匹配n次或多次,尽可能少匹配

     {n,m}?    n和m均为非负整数,都是确定的数字,匹配最少n次,最多m次,尽可能少匹配

 

3.捕获分组

(exp)                  匹配exp,并捕获文本到自动命名的组里。

(?<name>exp)   匹配exp,并捕获文本到名称为name的组里。

(?:exp)               匹配exp,不捕获匹配的文本,也不给此分组分配组号。

 

零宽断言

下面四个表达式用于查找在某些内容(不包括这些内容)之前或之后的文本,用于指定一个位置,这个位置要满足一定的条件(即断言),因此它们也被称为零宽断言。

(?=exp)              匹配exp前面的位置。

例如匹配字符串 "I love JavaScript" 的正则表达式为 "(?<txt>.+(?=ing))",这里取 "Script" 前面的所有字符,并定义了一个名字为 "txt" 的捕获分组,这个 "txt" 组里的值为 "I love Java"。

(?<=exp)            匹配exp后面的位置。

例如匹配字符串 "I love JavaScript" 的正则表达式为 "(?<txt>(?<=I).+)",这里取 "I" 后面的所有字符,并定义了一个名字为 "txt" 的捕获分组,这个 "txt" 组里的值为 " love JavaScript"。

(?!exp)                匹配后面跟的不是exp的位置。

例如匹配 "123abc",可以写成 "\d{3}(?!\d)",匹配3位数字后非数字的结果。

(?<!exp)              匹配前面不是exp的位置。

例如匹配 "abc123",可以写成 "(?<!\d123",匹配 "123" 前面是非数字的结果。

 4、运算符优先级

 正则表达式从左到右进行计算,并遵循优先级顺序。相同优先级从左到右进行计算,不同优先级先高后低。
下表从高级到低级排序:
\                                                     转义符

(),(?:),(?=),[]                                 圆括号和方括号

*,+,?,{n},{n,},{n,m}                     限定符

^,$,\任何元字符、任何字符                定位点和序列

|                                                     替换“或”操作

 

最后更新于2016.12.22

 

入门正则表达式