1 . 匹配任意单个字符 .
(英文句号) 元字符
1.1 . 多个点匹配多个任意字符
1.2 . 如果你只想匹配.
字符, 可以使用转义字符\.
2 . 匹配多个字符中的某一个 []
元字符
2.1 . eg:[ns]a
匹配na
或者sa
2.2 . 利用[]
匹配字符区间 eg: [A-Za-z0-9]
2.3-
(连字符)是一个特殊的字符,只能用在[]
中表示连字符,在字符集合以外的地方,-
只是一个普通的字符,并且不用被转义。
2.4 . 字符区间只能从小到大
3 . 取非匹配 ^
元字符
3.1 . 意思就是除了那个字符集合里的字符,其他字符都可以匹配
3.2 . eg:[ns]a[^0-9]\\.xls
匹配nam.xls
,不匹配sa8.xls
4 . 匹配特定的字符类
字符类 | 字符类的含义 | 等价的正则表达式 |
---|---|---|
\d | 任何一个数字字符 | [0-9] |
\D | 任何一个非数字字符 | [^0-9] |
\w | 任何一个数字,字母或者下划线 | [a-zA-Z0-9_] |
\W | 任何一个除了数字,字母和下划线的字符 | [^a-zA-Z0-9_] |
\s | 任何一个空白字符 | [\f\n\r\t\v] |
\S | 任何一个非空白字符` | [^\f\n\r\t\v]` |
注意:javascript不支持在正则表达式里使用POSIX字符类(eg [:alnum:]表示任意一个字母或数字)
5 . 匹配一个或多个字符 字符集后面跟上 +
元字符
5.1 . 字符集合[]
里使用像.
和+
这样的元字符将被解释为普通字符,不需要被转义,但是转义了之后也没有什么坏处。
6 . 匹配零个或多个字符 字符集后面跟上 *
元字符
7 . 匹配零个或一个字符 字符集后面跟上 ?
元字符
8 . 为重复次数设定一个精确的值 {\d}
(eg \d{6}
匹配一个六位的数字) {
}
元字符
9 . 为重复匹配次数设定一个区间 {\d,\d}
10 . 匹配“至少重复多少次” {\d,}
贪婪型元字符和懒惰型元字符(顾名思义,一个匹配尽可能多,另一个匹配尽可能少,懒惰型字符用于防止过度匹配。)
贪婪型元字符 | 懒惰型元字符 |
---|---|
* | \*? |
+ | \+? |
{n, } | {n, }? |
11 . 位置匹配
11.1 . 单词边界 \b
匹配前后有空格或者连字符的单词(单词可以是字母、数字或下划线)(eg: \bcat\b
匹配cat
、-cat-
,不匹配scattered
)
11.1.1 . 非单词边界 \B
匹配前后有空格或者连字符的非单词(非单词可以是空格或者连字符)
11.2 . 字符串边界
字符串边界 | 字符串边界的含义 | 举例 | 举例解释 |
---|---|---|---|
^ | 用来确定字符串开头的位置 | ^\s*< xml.*> | 匹配以< xml...> 开头的字符串 |
$ | 用来确定字符串结束的位置 | </[hH][tT][mM][lL]>\s*$ | 匹配以</html> 结束的字符串 |
11.3 . 分行匹配模式 (?m)
eg: (?m)^\s*//.*$
匹配所有的位于单独行的注释
12 . 子表达式 ()
13 . 回溯引用匹配 \\d
要配合子表达式()
使用,其中\d
表示RE中第\d个子表达式
(javascript用$
代替\
,即$\d
) \d
表示任意数字
eg:
<[hH][1-6]>.*?</[hH][1-6]>
// 可能会匹配<h2>...</h3>
<[hH]([1-6])>.*?</[hH]\1>
// 回溯引用 \1匹配第一个子表达式,即和[1-6]相同的部分,JS的表示形式为<[hH]([1-6])>.*?</[hH]$1>
14 . 前后查找 用于匹配正确的位置,但正则表达式的某些部分并不是匹配结果的一部分,不用返回。(常见的正则表达式都支持向前查找,但是支持向后查找的没有那么多。Java,.NET,PHP,Perl都支持向后查找(但是有一些限制),JavaScript,ColdFusion都不支持向后查找。)
前后查找类型 | 前后查找类型的表达式 | 示例 | 示例解释 |
---|---|---|---|
向前查找 | (?=) | .+(?=:) | 匹配:之前的字符,但不包括: |
向后查找 | (?<=) | (?<=\$)[0-9]+ | 匹配$之后的字符,但不包括$ |
负向后查找 | (?<!) | \b(?<!\$)[0-9]+\b | eg:I paid $30 for 100 apples. 匹配100,不匹配$30中的30。 |
负向后查找 | (?!) |
15 . 嵌入条件
15.1 . 回馈引用条件 (?(backreference)true-regex|false-regex)
其中backreferrence是回馈引用
eg:
(<[aA]\s+[^>]+>\s*)?<[iI][mM][gG]\s+[^>]+>(?(1)\s*</[aA]>)
匹配单独的
<img...>
标签或者被括在<a...>
和</a>
之间的整个链接标签。