字符
量词
x*
x* 将前面的项“x”匹配0次或更多次。例如,/bo*/
匹配“A ghost booooed”中的“boooo”和“A bird warbled”中的“b”,但在“A goat grunt”中没有匹配。
x+
x+ 将前一项“x”匹配1次或更多次。等价于{1,}
。例如,/a+/匹配“candy”中的“a”和“caaaaaaandy”中的“a”。
x?
x?
将前面的项“x”匹配0或1次。例如,/e?le?/
匹配angel中的el和angle中的le。
x{n}
x{n}
其中“n”是一个正整数,与前一项“x”的n次匹配。例如,/a{2}/
不匹配“candy”中的“a”,但它匹配“caandy”中的所有“a”,以及“caaandy”中的前两个“a”。
x{n,}
x{n,}
其中,“n”是一个正整数,与前一项“x”至少匹配“n”次。例如,/a{2,}/
不匹配“candy”中的“a”,但匹配“caandy”和“caaaaaaandy”中的所有a。
x{n,m}
x{n,m}
其中,“n”是0或一个正整数,“m”是一个正整数,而m > n至少与前一项“x”匹配,最多与“m”匹配。例如,/a{1,3}/
不匹配“cndy”中的“a”,“candy”中的“a”,“caandy”中的两个“a”,以及“caaaaaaandy”中的前三个“a”。注意,当匹配“caaaaaaandy”时,匹配的是“aaa”,即使原始字符串中有更多的“a”。
x*?
x?*
x+?
x+?
x??
x??
x{n}?
x{n}?
x{n,}?
x{n,}?
x{n,m}?
x{n,m}?
字符类
.
. 有下列含义之一:
- 匹配除行终止符之外的任何单个字符:
\n
,\r
,\u2028
or\u2029
. 例如,/.y/
在“yes make my day”中匹配“my”和“ay”,而不是“yes”。 - 在字符集内,点失去了它的特殊意义,并与文字点匹配
反斜杠d
\d
匹配任何数字(阿拉伯数字)。 相当于 [0-9].
例如, /\d/
或 /[0-9]/
匹配 “B2is the suite number”中的“2”。
反斜杠D
\D
匹配任何非数字(阿拉伯数字)的字符。相当于[^0-9]
. 例如, /\D/
or /[^0-9]/
在 "B2 is the suite number" 中 匹配 "B".
反斜杠w
\w
匹配基本拉丁字母中的任何字母数字字符,包括下划线。相当于 [A-Za-z0-9_]
. 例如, /\w/
在 "apple" 匹配 "a" , "5" in "$5.28", "3" in "3D" and "m" in "Émanuel".
反斜杠W
\W
匹配任何不是来自基本拉丁字母的单词字符。相当于 [^A-Za-z0-9_]
. 例如, /\W/
or /[^A-Za-z0-9_]/
匹配 "%" 在 "50%" 以及 "É" 在 "Émanuel" 中.
反斜杠s
\s
反斜杠S
\S
反斜杠t
\t
反斜杠r
\r
反斜杠n
\n
反斜杠v
\v
反斜杠f
\f
反斜杠v
\v
反斜杠f
\f
边界类断言
范围开头 ^
^
匹配输入的开头。如果多行模式设为 true,^
在换行符后也能立即匹配,比如 /^A/
匹配不了 "an A" 里面的 "A",但是可以匹配 "An A" 里面第一个 "A"。
语法
场景
-
匹配开头为空格的字符
const reg = /^\s+/;
const str = ' 柏拉图';
console.log(reg.test(str)); -
匹配开头或者结尾为空格的字符
const reg = /^\s+|\s+$/;
const str = ' 柏拉图 ';
console.log(reg.test(str));
集合开头 ^
$
** 在换行符前也能立即匹配,比如 /t$/
不能匹配 "eater" 中的 "t",但是可以匹配 "eat" 中的 "t"。
语法
场景
-
匹配开头为空格的字符
const reg = /\s+$/;
const str = '柏拉图 ';
console.log(reg.test(str)); -
匹配开头或者结尾为空格的字符
const reg = /^\s+|\s+$/;
const str = ' 柏拉图 ';
console.log(reg.test(str));
反斜杠b
\b
匹配一个单词的边界,这是一个字的字符前后没有另一个字的字符位置, 例如在字母和空格之间。需要注意的是匹配的单词边界不包括在匹配中。换句话说,匹配字边界的长度为零。
反斜杠B
\B
匹配非单词边界。这是上一个字符和下一个字符属于同一类型的位置:要么两者都必须是单词,要么两者都必须是非单词,例如在两个字母之间或两个空格之间。字符串的开头和结尾被视为非单词。与匹配的词边界相同,匹配的非词边界也不包含在匹配中。例如,/\Bon/ 在 “at noon” 中匹配 “on” ,/ye\B/ 在 "possibly yesterday"中匹配"ye" 。
其他断言
x(?=y)
x(?=y)
向前断言: x 被 y 跟随时匹配 x。例如,对于/Jack(?=Sprat)/
,“Jack”在跟有“Sprat”的情况下才会得到匹配./Jack(?=Sprat|Frost)/
“Jack”后跟有“Sprat”或“Frost”的情况下才会得到匹配。不过, 匹配结果不包括“Sprat”或“Frost”。
x(?!y)
x(?!y)
向前否定断言: x 没有被 y 紧随时匹配 x。例如,对于/\d+(?!\.)/
,数字后没有跟随小数点的情况下才会得到匹配。对于/\d+(?!\.)/.exec(3.141)
,匹配‘141’而不是‘3’。
(?<=y)x
(?<=y)x
向后断言: x 跟随 y 的情况下匹配 x。例如,对于/(?<=Jack)Sprat/
,“Sprat”紧随“Jack”时才会得到匹配。对于/(?<=Jack|Tom)Sprat
,“Sprat”在紧随“Jack”或“Tom”的情况下才会得到匹配。不过,匹配结果中不包括“Jack”或“Tom”。
(?<!y)x
(?<!y)x
向后否定断言: x 不跟随 y 时匹配 x。例如,对于/(?<!-)\d+/
,数字不紧随-符号的情况下才会得到匹配。对于/(?<!-)\d+/.exec(3)
,“3”得到匹配。 而/(?<!-)\d+/.exec(-3)
的结果无匹配,这是由于数字之前有-符号。
组合范围
x|y
x|y
匹配 "x" 或 "y" 任意一个字符。例如, /green|red/
在 "green apple" 里匹配 "green",且在 "red apple" 里匹配 "red" 。
[xyz] 或者 [x-z]
[xyz] 或者 [x-z] 字符集。 匹配任何一个包含的字符。您可以使用连字符来指定字符范围,但如果连字符显示为方括号中的第一个或最后一个字符,则它将被视为作为普通字符包含在字符集中的文字连字符。也可以在字符集中包含字符类。
[^xyz] 或者 [^x-z]
[^xyz] 或者 [^x-z] 一个否定的或被补充的字符集。也就是说,它匹配任何没有包含在括号中的字符。可以通过使用连字符来指定字符范围,但是如果连字符作为方括号中的第一个或最后一个字符出现,那么它将被视为作为普通字符包含在字符集中。例如,[^abc]和[^a-c]一样。它们最初匹配“bacon”中的“o”和“chop”中的“h”。
(x)
(x) 捕获组: 匹配x并记住匹配项。例如,/(foo)/匹配并记住“foo bar”中的“foo”
反斜杠n
\n 其中n是一个正整数。对正则表达式中与n括号匹配的最后一个子字符串的反向引用(计算左括号)。例如,/apple(,)\sorange\1/ 匹配 “apple,orange,cherry,peach” 中的 "apple,orange,", 其中 \1 引用了 之前使用 () 捕获的 ,
(?<Name>x)
(?<Name>x)
具名捕获组: 匹配"x"并将其存储在返回的匹配项的groups属性中,该属性位于<Name>
指定的名称下。尖括号(< 和 >) 用于组名。
(?:x)
(?:x) 非捕获组: 匹配 “x”,但不记得匹配。不能从结果数组的元素中收回匹配的子字符串([1], ..., [n]) or from the predefined RegExp object's properties (9).