跳到主要内容

字符

量词


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));

集合开头 ^

$

**匹配输入的结束。如果多行模式设为true** 匹配输入的结束。如果多行模式设为 true, 在换行符前也能立即匹配,比如 /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 (1,...,1, ..., 9).