- 正则表达式查找特定的信息(搜索),查找并编辑特定的信息(替换)。简单地说,正则是一些用来匹配和处理文本的字符串。
- 元字符:有特殊含义的字符
- 元字符
.
英文句号,可以匹配除换行符以外的任何单个字符,单个的字符、字母、数字甚至是其本身(\.
)。 - 元字符
[和]
:[]
不匹配任何字符,它们只负责定义一个字符集合 - 元字符
-
字符区间,如 0123456789 可用0-9
A-Z
匹配从 A 到 Z 的所有大写字母a-z
匹配从 a 到 z 的所有小写字母A-z
匹配从 ASCII 字符 A 到 ASCII 字符 z 的所有字母。这个模式一般不常用,因为它还包含着[和^等在 ASCII 字符表里排列在 z 和 a 之间的字符]- 字符区间的首尾字符可以是 ASCII 字符表里的任意字符。但在实际工作中,最常用的字符区间还是数字字符区间和字母字符区间。
- 在定义一个字符区间的时候,一定要避免让这个区间的尾字符小于它的首字符。这种区间是没有意义的,而且往往会让这个模式失效
- 注意
-
(连字符) 是一个特殊的元字符,作为元字符,她只能用在[和]
之间。在字符集合以外的地方,只是一个普通字符,只能与-
本身相匹配。因此,在正则里,-
不需要被转义 [A-Za-z0-9]
匹配任何一个字母(无论大小写)和数字`
^
元字符对一个字符集合进行取非匹配
注意,^
的效果将作用域给定字符集合里的所有字符或字符区间,而不是仅限于仅跟随在^
后面的那个字符区间
第四章 使用元字符
匹配空白字符
[\b]
回退(并删除)一个字符(Backspace 键)\f
换页符\n
换行符\r
回车符\t
制表符 (Tab 键)\v
垂直制表符\r\n
匹配一个 “回车+换行”组合,有许多操作系统(比如 Windows)都把这个组合作为文本行的结束标签。
匹配数字
\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]
任何一个非空白字符
第五章 重复匹配
5.1 有多少个匹配
- 匹配一个或多个字符
+
想要匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上+
字符作为后缀就行了,比如a+
将匹配一个或多个连续出现的 a。[0-9]+
将匹配一个或多个连续的数字+
我前面的字符最少出现一次 - 匹配零个或多个字符
*
+
匹配一个或多个字符,但不匹配零个字符。这种匹配需要用*
元字符来完成,*
的用法 和+
完全一样。*
可以理解为 在我前面的字符(或字符集合)是可选的 - 匹配零个或一个字符
?
?
前面的字符要么不出现,要么只出现一次
不少程序员喜欢把一个字符也定义为一个集合,这么租窦娥好处是可以增加可读性和避免产生误解,让人们一眼看出哪个字符与哪个元字符相关联。如匹配 http:// https://
则使用 http[s]?://
。而不是 http[s?]://
那样就会匹配 https:// 或 http?://
了,即[s?]
s 与 ? 问号 是一个 字符集合
5.2 匹配的重复次数
设定重复次数的语法
{}
和字符 给出,把数值写在它们之间。s{3}
将匹配三个 字符s
{}
是元字符,匹配本身时 需转义\{\}
。其实不转义大部分表达式实现也能正确地处理它们,但不要依赖他们为重复匹配次数设定一个区间
{}
语法还可以用来为重复匹配次数设定一个区间{2,4}
最少重复 2 次、最多重复 4 次.注意{2,4}
之间 没有任何空格匹配“至少重复多少次”
{}
语法 的最后一种用法是给出一个最小的重复次数(但不必给出一个最大值)。{3,}
表示至少重复 3 次,与之等价的说法是“必须重复 3 次或更多次”*
与+
都是所谓的“贪婪型”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的。他们会尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。
在不需要使用这种“贪婪行为”的时候该怎么办?大安市使用这些元字符的“栏遁形”版本(“懒惰”在这里的含义是匹配尽可能少的字符,与“贪婪型”元字符的行为模式刚好相反)。方法是给贪婪型元字符加上一个?
后缀即可。 1.*
→*?
2.+
→+?
3.{n,}
→{n,}?
第六章 位置匹配
6.1 边界
位置匹配用来解决在什么地方进行字符串匹配操作的问题\b
匹配的是这样一个位置,这个位置 位于 一个能够用来构成单词的字符(\w)和一个不能用来构成单词的字符(\W)之间\b
匹配只匹配一个位置,不匹配任何字符。用\bcat\b
匹配到的字符串长度是 3 个字符(c a t) 不是 5 个字符\B
不匹配一个单词边界,即字母数字下划线之间,或者非字母数字下划线之间
6.2 单词边界
\b
用来匹配一个单词的开始或结尾(boundary 边界)
如果你想披撇一个完整的单词,就必须在你想要匹配的文本的前后都加上\b
限定符
/\B-\B/
匹配 a - b
/\b-\b/
匹配 a-b
test
1 | var regex = /hello/; |
replace
1 | 'sjn@163.com'.replace(/j(.+)(@)(.\*)/, function(...args) { |
match
1 | var regex = /a[123]b/g; |