十二、附录 d:正则表达式
当使用正则表达式时(在第 4 章中讨论),可以匹配文字字符串,例如:
>>> "some text".match(/me/)
【“我”】
但是正则表达式的真正力量来自匹配模式,而不是文字字符串。下表描述了您可以在模式中使用的不同语法,并提供了一些它们的使用示例。
|
模式
|
描述
|
| --- | --- |
| [abc]
| 匹配一类字符。
>>> "some text".match(/[otx]/g)
["o", "t", "x", "t"]
|
| [a-z]
| 定义为范围的一类字符。例如 [a-d]
与 [abcd], [a-z]
相同,匹配所有小写字符, [a-zA-Z0-9_]
匹配所有字符、数字和下划线字符。
>>> "Some Text".match(/[a-z]/g)
["o", "m", "e", "e", "x", "t"]
>>> "Some Text".match(/[a-zA-Z]/g)
["S", "o", "m", "e", "T", "e", "x", "t"]
|
| [^abc]
| 匹配字符类匹配的所有而不是的内容。
>>> "Some Text".match(/[^a-z]/g)
["S", " ", "T"]
|
| a|b
| 匹配 a
或 b
。管道字符表示“或”,可以多次使用。
>>> "Some Text".match(/t|T/g);
["T", "t"]
>>> "Some Text".match(/t|T|Some/g);
["Some", "T", "t"]
|
| a(?=b)
| 仅当后跟 b
时匹配 a
。
>>> "Some Text".match(/Some(?=Tex)/g);
null
>>> "Some Text".match(/Some(?= Tex)/g);
["Some"]
|
| a(?!b)
| 仅当后面没有跟随 b
时匹配 a
。
>>> "Some Text".match(/Some(?! Tex)/g);
null
>>> "Some Text".match(/Some(?!Tex)/g);
["Some"]
|
| \
| 转义字符用于帮助您将模式中使用的特殊字符匹配为文字。
>>> "R2-D2".match(/[2-3]/g)
["2", "2"]
>>> "R2-D2".match(/[2\-3]/g)
["2", "-", "2"]
|
| \n``\r``\f``\t``\v
| 换行回车换页标签垂直标签 |
| \s
| 空格,或者上面五个转义序列中的任何一个。
>>> "R2\n D2".match(/\s/g)
["\n", " "]
|
| \S
| 与上述相反;匹配除空白以外的所有内容。与 [^\s]:
相同
>>> "R2\n D2".match(/\S/g)
["R", "2", "D", "2"]
|
| \w
| 任何字母、数字或下划线。与 [A-Za-z0-9_]
相同。
>>> "Some text!".match(/\w/g)
["S", "o", "m", "e", "t", "e", "x", "t"]
|
| \W
| \w
对面。
>>> "Some text!".match(/\W/g)
[" ", "!"]
|
| \d
| 匹配一个数字,与[0-9]相同。
>>> "R2-D2 and C-3PO".match(/\d/g)
["2", "2", "3"]
|
| \D
| \d
对面;匹配非数字,与[^0-9]或[^\d].]相同
>>> "R2-D2 and C-3PO".match(/\D/g)
["R", "-", "D", " ", "a", "n", "d", " ", "C", "-", "P", "O"]
|
| \b
| 匹配单词边界,如空格或标点符号。匹配研发,后跟 2:
>>> "R2D2 and C-3PO".match(/[RD]2/g)
["R2", "D2"]
Same as above but only at the end of a word:
>>> "R2D2 and C-3PO".match(/[RD]2\b/g)
["D2"]
Same pattern but the input has a dash, which is also an end of a word:
>>> "R2-D2 and C-3PO".match(/[RD]2\b/g)
["R2", "D2"]
|
| \B
| \b
的反义词。
>>> "R2-D2 and C-3PO".match(/[RD]2\B/g)
null
>>> "R2D2 and C-3PO".match(/[RD]2\B/g)
["R2"]
|
| [\b]
| 匹配退格字符 |
| \0
| 空字符 |
| \u0000
| 匹配由四位十六进制数表示的 Unicode 字符。
>>> "стоян".match(/\u0441\u0442\u043E/)
["сто"]
|
| \x00
| 匹配由两位十六进制数表示的字符代码。
>>> "dude".match(/\x64/g)
["d", "d"]
|
| ^
| 要匹配的字符串的开头。如果设置了 m
修改器(多行),它将匹配每一行的开头。
>>> "regular\nregular\nexpression".match(/r/g);
["r", "r", "r", "r", "r"]
>>> "regular\nregular\nexpression".match(/^r/g);
["r"]
>>> "regular\nregular\nexpression".match(/^r/mg);
["r", "r"]
|
| $
| 匹配输入的结尾,或者在使用多行修饰符时,匹配每行的结尾。
>>> "regular\nregular\nexpression".match(/r$/g);
null
>>> "regular\nregular\nexpression".match(/r$/mg);
["r", "r"]
|
| 。
| 匹配除新行和换行符之外的任何字符。
>>> "regular".match(/r./g);
["re"]
>>> "regular".match(/r.../g);
["regu"]
|
| *
| 如果出现 0 次或更多次,则匹配前面的模式。例如 /.*/
将匹配任何不包含任何内容的内容(空输入)。
>>> "".match(/.*/)
[""]
>>> "anything".match(/.*/)
["anything"]
>>> "anything".match(/n.*h/)
["nyth"]
|
| ?
| 如果出现 0 或 1 次,则匹配前面的模式。
>>> "anything".match(/ny?/g)
["ny", "n"]
|
| +
| 匹配前面的模式,如果它至少出现一次(或多次)。
>>> "anything".match(/ny+/g)
["ny"]
>>> "R2-D2 and C-3PO".match(/[a-z]/gi)
["R", "D", "a", "n", "d", "C", "P", "O"]
>>> "R2-D2 and C-3PO".match(/[a-z]+/gi)
["R", "D", "and", "C", "PO"]
|
| {n}
| 如果恰好出现 n
次,则匹配前面的模式。
>>> "regular expression".match(/s/g)
["s", "s"]
>>> "regular expression".match(/s{2}/g)
["ss"]
>>> "regular expression".match(/\b\w{3}/g)
["reg", "exp"]
|
| {min,max}
| 如果出现在 min
和 max
之间的次数,则匹配前面的模式。您可以省略 max
,这将意味着没有最大值,但只有最小值。您不能省略 min.
输入为“嘟嘟”且“o”重复 10 次的示例:
>>> "doooooooooodle".match(/o/g)
["o", "o", "o", "o", "o", "o", "o", "o", "o", "o"]
>>> "doooooooooodle".match(/o{2}/g)
["oo", "oo", "oo", "oo", "oo"]
>>> "doooooooooodle".match(/o{2,}/g)
["oooooooooo"]
>>> "doooooooooodle".match(/o{2,6}/g)
["oooooo", "oooo"]
|
| (pattern)
| 当模式在括号中时,它会被记住,以便可以用于替换。这也称为捕获模式。捕获的匹配可作为 $1, $2,... $9
获得匹配所有出现的“r”并重复它们:
>>> "regular expression".replace(/(r)/g, '$1$1')
"rregularr exprression"
Matching "re" and turning it to "er":
>>> "regular expression".replace (/(r)(e)/g, '$2$1')
"ergular experssion"
|
| (?:pattern)
| 非捕获模式,不记得,在 $1, $2..
中不可用。这里有一个“re”如何匹配的例子,但是“r”没有被记住,第二个模式变成了 $1:
>>> "regular expression".replace (/(?:r)(e)/g, '$1$1')
"eegular expeession"
|
当一个特殊字符可以有两种含义时,一定要注意,如 ^, ?
和 \b
的情况。
版权属于:月萌API www.moonapi.com,转载请注明出处