括号(又名捕获组)
括号用于表示正则表达式中的一组符号,当匹配时,它们会在匹配结果中“记住”。每个匹配的组都标有编号顺序,如 \1、\2 等。在示例 /(foo) (bar) \1 \2/ 中,我们记住匹配 foo 为 \1,匹配 bar 为 \2。这意味着字符串“foo bar foo bar”匹配正则表达式,因为第三和第四项(\1 和\2)匹配第一个和第二个捕获组(即(foo)和(bar))。您可以像这样在 javascript 中使用捕获组:
/id:(\d+)/.exec("the item has id:57") // => ["id:57", "57"]
请注意,在返回中,我们得到了整个比赛,以及被捕获的后续组。
小数点(又名通配符)
小数点用于表示可以具有任何值的单个字符。这意味着正则表达式 /.n/ 将匹配任何两个字符串,其中第二个字符是“n”。所以/.n/.test("on") // => true
,/.n/.test("an") // => true
但是/.n/.test("or") // => false
。DrC 在评论中提出了一个很好的观点,即这与换行符不匹配,但我觉得为了成为一个问题,您需要明确指定multiline mode。
单词边界
单词边界将匹配直接在单词之前或直接在单词之后(即与单词字符相邻)的任何非单词字符。在 javascript 中,单词字符是任何字母数字和下划线(mdn),非单词显然是其他一切!单词边界的技巧是它们是零宽度断言,这意味着它们不算作字符。这就是 /\w\b\w/ 永远不会匹配的原因,因为两个单词字符之间永远不可能有单词边界。
非单词边界
与单词边界相反,它不会匹配从非单词到单词或单词到非单词(即单词的结尾)的点,而是匹配在相同类型字符之间移动的点。因此,对于我们的示例,/\B../
将匹配字符串中位于相同类型的两个字符和接下来的两个字符之间的第一个点,在这种情况下,它位于第一个 'n' 和 'o' 之间,接下来的两个字符是“oo ”。在第二个例子中/y\B./
我们正在寻找字符 'y' 后跟匹配类型的字符(所以是单词字符)和 '.' 将匹配第二个字符。所以“可能昨天”不会匹配“可能”末尾的“y”,因为下一个字符是空格,这是一个非单词,但它会匹配“昨天”开头的“y” , 因为它后跟一个单词字符,然后由 '.' 包含在匹配项中 在正则表达式中。
总体而言,正则表达式在许多语言中都很流行,并且基于良好的理论基础,因此有很多关于这些字符的材料。一般来说,Javascript 与 Perl 的 PCRE 正则表达式非常相似(但不完全相同!),因此任何关于 javascript 正则表达式的问题都可以通过任何 PCRE 正则表达式教程(其中有很多)来回答。
希望有帮助!