js正则表达式的结构:字符字面量、字符组、量词、锚、分组、选择分支、反向引用
- 字面量
- 匹配一个具体字符,包括不用转义的和需要转义的。比如
a
匹配字符“a” - 比如
\n
匹配换行符,比如\.
匹配小数点.
- 匹配一个具体字符,包括不用转义的和需要转义的。比如
- 字符组
- 匹配一个字符,可以是多种可能之一,比如
[0-9]
,表示匹配一个数字,简写\d
- 反义字符组,表示可以是除了特定字符之外任何一个字符,比如 [^0-9]。表示一个非数字字符,简写
\D
- 匹配一个字符,可以是多种可能之一,比如
- 量词
- 表示一个字符连续出现,比如
a{1,3}
表示a
字符连续出现 3 次. - 简写形式,比如
a+
表示a
字符连续出现至少一次.
- 表示一个字符连续出现,比如
- 锚
- 匹配一个位置,而不是字符。比如
^
匹配字符串的开头,又比如\b
匹配单词边界 - 比如
(?=\d)
表示数字前面的位置。
- 匹配一个位置,而不是字符。比如
- 分组
- 用括号表示一个整体,比如
(ab)+
,表示"ab"
两个字符连续出现多次 - 也可以使用非捕获分组
(?:ab)+
。
- 用括号表示一个整体,比如
- 分支
- 多个子表达式多选一,比如
abc|bcd
,表达式匹配"abc"
或者"bcd"
字符子串 - 反向引用,比如
\2
,表示引用第 2 个分组
- 多个子表达式多选一,比如
操作符描述 | 操作符 | 优先级 |
---|---|---|
转义符 | \ | 1 |
括号和方括号 | (…)、(?:…)、(?=…)、(?!…)、[…] | 2 |
量词限定符 | {m}、{m,n}、{m,}、?、*、+ | 3 |
位置和序列 | ^、$、\元字符、一般字符 | 4 |
管道符(竖杠) | | | 5 |
- 分析:
/ab?(c|de*)+|fg/
- 由于括号的存在,所以
(c|de*)
是一个整体,并且由于量词*
,e*
也是一个整体 - 并且由于分支结构
|
的优先级最低c
和de*
是两个不同的整体结构 - 整个正则分为
a
、b?
、(...)+
、f
、g
。由于分支的原因又可以分成ab?(c|de*)+
和fg
- 由于括号的存在,所以
- 字符串整体问题,经常会在正则后加上锚
^
和$
- 量词连缀问题
- 元字符转义
^
、$
、.
、*
、+
、?
、|
、\
、/、
(、
)、
[、
]、
{、
}、
=、
!、
:、
-`- 以上字符匹配
\
字符可以转义 - 跟字符组相关的字符有
[
、]
、^
、-
。其中匹配开头的^
必须转义,不然会把整个字符组看成反义字符组 - 当匹配
[abc]
或者{3,5}
时- 可以写成
/\[abc\]/
或者/\[abc]/
- 可以写成
/\{abc\}/
或者/\{3,5}/
- 可以写成
=
、!
、:
、-
、,
等符号,只要不在特殊结构内不需要转义
身份证。正则表达式是
/^(\d{15}|\d{17}[\dxX])$/