六、附录 A:JavaScript 正则备忘单
在本附录中,您可以找到 JavaScript 中正则表达式所用模式的摘要及其描述,以及测试和创建正则表达式的有用方法列表。
本附录将涵盖以下 Regex 主题:
- 字符类和文字
- 字符集
- 界限和量词
- 分组、交替和反向引用
- 有用的方法
字符类
在下表中,您可以找到字符类的模式,这些模式告诉 Regex 匹配单个字符:
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| .
| 这匹配任何字符,除了换行符或另一个 unicode 行结束符,如(\n, \r, \u2028
或\u2029
)。 | /f.o/
匹配“fao”、“feo”和“foo” |
| \w
| 这匹配任何字母数字字符,包括下划线。相当于[a-zA-Z0-9_]
。 | /\w/
匹配“foo”中的“f” |
| \W
| 这匹配任何单个非单词字符。相当于[^a-zA-Z0-9_]
。 | /\W/
匹配“100%”中的“%” |
| \d
| 这匹配任何一个数字。相当于[0-9]
。 | /\d/
匹配“100”中的“1” |
| \D
| 这与任何非数字匹配。相当于[^0-9]
。 | /\D/
匹配“R2-D2”中的“R” |
| \s
| 这匹配任何单个空格字符。相当于[ \t\r\n\v\f]
。 | /\s/
匹配“foo bar”中的“” |
| \S
| 这匹配任何单个非空格字符。相当于[^ \t\r\n\v\f]
。 | /\S/
匹配“foo bar”中的“foo” |
文字
在下表中,您可以找到文字字符的模式,这些模式告诉 Regex 匹配一个特殊字符:
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| Alphanumeric
| 这些完全匹配。 | /javascript book/
匹配“javascript book”中的“javascript book” |
| \0
| 这匹配一个NUL
字符。 | |
| \n
| 这与换行符匹配。 | |
| \f
| 这与表单源字符匹配。 | |
| \r
| 这与回车符匹配。 | |
| \t
| 这与制表符匹配。 | |
| \v
| 这与垂直制表符匹配。 | |
| [\b]
| 这与退格字符匹配。 | |
| \xxx
| 这与 ASCII 字符匹配,由xxx
八进制数表示。 | /112/
匹配“J”字符 |
| \xdd
| 这与 ASCII 字符匹配,用dd
十六进制数表示。 | /x4A/
匹配“J”字符 |
| \uxxxx
| 这与 ASCII 字符相匹配,用xxxx
UNICODE 表示。 | /u0237/
匹配“J”字符 |
| \
| 这个表示下一个字符是否特殊,不做字面解释。 | /\^/
匹配“char ^”中的“^” |
字符集
在下表中,您可以找到字符集的模式,这些模式告诉 Regex 只匹配几个字符中的一个字符。
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| [xyz]
| 这与字符集内的任何一个字符匹配。您可以使用连字符来表示范围。例如,/[a-z]/
匹配字母表中的任意一个字母,而/[0-9]/
匹配任意一个数字。 | /[ao]/
匹配“条”中的“a” |
| [^xyz]
| 这匹配任何一个不包含在字符集内的字符。 | /[^ao]/
匹配“条”中的“b” |
边界
在下面的表中,你可以找到边界的模式,这将告诉 Regex 在什么位置进行匹配。
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| ^
| 这与输入的开头相匹配。如果多行标志设置为真,它也会在(\n
)换行符之后立即匹配。 | /^ The/
匹配《星星》中的“The”,但不匹配《星星》中的“The”。 |
| $
| 这与输入的结尾相匹配。如果多行标志设置为真,它也与(\n
)换行符之前的字符匹配。 | /
和$/
匹配“地”中的“和”,但不匹配“和巴”。 |
| \b
| 这匹配任何单词边界(测试字符必须存在于字符串中单词的开头或结尾)。 | /va\b/
匹配“这是一本 java 脚本书”中的“va”,但不匹配“这是一本 java script 书”。 |
| \B
| 这与任何非字边界匹配。 | /va\B/
匹配“这是一本 JavaScript 书”中的“va”,但不匹配“这是一本 JavaScript 书”。 |
分组、交替、回指
在下面的表中,可以找到分组、交替和回溯的模式。分组用于对正则表达式中的一组字符进行分组。交替用于将字符组合成单个正则表达式,反向引用用于匹配捕获组先前匹配的相同文本:
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| (x)
| 这将字符组合在一起创建一个子句,即它匹配x
并记住匹配。这些称为捕捉括号。 | /(foo)/
匹配并记住“foo 吧”中的“foo”。 |
| ()
| 括号还用于捕获模式中所需的子模式。 | /(\d\d)\/(\d\d)\/(\d\d\d\d)/
匹配“12/12/2000”中的“12”、“12”和“2000”。 |
| (?:x)
| 这与x
匹配,但不捕捉。换句话说,不会为括号内的项目创建编号引用。这些称为非捕获括号。 | /(?:foo)/
匹配,但不记得“foo bar”中的“foo”。 |
| |
| Alternation 将子句组合成一个正则表达式,然后匹配任何单个子句。x|y
匹配x
或y
。它类似于“或”语句。 | /morning|night/
匹配“早上好”中的“早上”,匹配“晚上好”中的“晚上”。 |
| ()\n
| “\n
”(其中 n 是 1-9 之间的数字)当添加到常规表达式模式的末尾时,允许您支持引用模式内的子模式,因此,子模式的值被记住并用作匹配的一部分。 | /(no)\1/
匹配“nono”中的“nono”。“\1
”被替换为模式中第一个子模式的值,或者(否),以形成最终的模式。 |
量词
在下面的表中,您可以找到量词的模式,它指定了一个输入中必须有多少字符、组或字符类的实例才能找到匹配。
|
模式
|
描述
|
例子
|
| --- | --- | --- |
| {n}
| 这与正则表达式的出现完全匹配。 | /\d{5}/
匹配“1234567890”中的“12345”(五位数)。 |
| {n,}
| 这与一个正则表达式的n
或更多次匹配。 | /\d{5,}/
匹配“1234567890”中的“1234567890”(最少五位数)。 |
| {n,m}
| 这与正则表达式出现的次数n
和 m
相匹配。 | /\d{5,7}/
匹配“1234567890”中的“1234567897”(最少五位数,最多七位数)。 |
| *
| 这与零个或多个出现匹配,相当于{0,}
。 | /fo*/
匹配“foo”中的“foo”,匹配“fooooooooled”中的“foooooooo”。 |
| +
| 这与一个或多个事件相匹配,相当于{1,}
。 | /o+/
匹配“foo”中的“oo”。 |
| ?
| 这与零个或一个出现匹配,相当于{0,1}
。 | /fo?/
匹配“foo”中的“fo”,匹配“仙女”中的“f”。 |
| +?``*?
| "?"
也可以跟在*
、+
、?
或{}
量词后面使用,以使后面的匹配不重复,或者最小次数与默认最大次数进行比较。 | /\d{2,4}?/
匹配“12345”字符串中的“12”,而不是“1234”,这是由于量词 nongreedy 末尾的“?
”。 |
| x(?=y)
| 正向前瞻:只有跟在y
后面,才匹配x
。注意y
不包括在比赛中,只是作为一个必要条件。 | /Java(?=Script|Hut)/
匹配“JavaScript”或“JavaHut”中的“Java”,但不匹配“JavaLand”。 |
| x(?!y)
| 负前瞻:只有在没有跟在y
后面的情况下,才匹配x
。请注意,y
不作为比赛的一部分,仅作为必要条件。 | /^\d+(?! years)/
匹配“5 天”或“5 本书”中的“5”,但不匹配“5 年”。 |
JavaScript 正则表达式方法
在下面的表中,您可以找到用于匹配或测试正则表达式的方法。正则表达式中使用的主要 JavaScript 对象是String
和RegExp
,它们代表一种模式(如regular expression
)。
|
方法
|
描述
|
例子
|
| --- | --- | --- |
| String.match(regular expression)
| 这将基于正则表达式在字符串中执行匹配搜索。 | var myString = "today is 12-12-2000";``var matches = myString.match(/\d{4}/);``//returns array ["2000"]
|
| RegExp.exec(string)
| 这会在其字符串参数中执行匹配搜索。与String.match
不同,输入的参数应该是字符串,而不是正则表达式模式。 | var pattern = /\d{4}/;``pattern.exec("today is 12-12-2000");``//returns array ["2000"]
|
| String.replace(regular expression, replacement text)
| 这会搜索正则表达式部分,并用替换的文本替换它。 | var phone = "(201) 123-4567";``var phoneFormatted = phone.replace(/[\(\)-\s]/g, "");``//returns 2011234567 (removed ( ) - and blank space)
|
| String.split (string literal or regular expression)
| 这将根据正则表达式或固定字符串将字符串分解为子字符串数组。 | var oldstring = "1,2, 3, 4, 5";``var newstring = oldstring.split(/\s*,\s*/);``//returns the array ["1","2","3","4","5"]
|
| String.search(regular expression)
| 这将测试字符串中的匹配。它返回匹配的索引,如果没有找到,则返回-1
。 | var myString = "today is 12-12-2000";``myString.search(/\d{4}/);``//returns 15 - index of 2000
|
| RegExp.test(string)
| 这将测试给定的字符串是否匹配 Regexp,如果匹配则返回 true,如果不匹配则返回 false。 | var pattern = /\d{4}/;``pattern.test("today is 12-12-2000");``//returns true
|
在本附录中,我们非常简要地介绍了本书中所学的模式,其格式易于日常参考。
版权属于:月萌API www.moonapi.com,转载请注明出处