在正则表达式中,使用圆括号 () 和方括号 [] 分别有什么区别?
以下代码:
[a-z0-9]
与此不同:
(a-z0-9)
?
在正则表达式中,使用圆括号 () 和方括号 [] 分别有什么区别?
以下代码:
[a-z0-9]
与此不同:
(a-z0-9)
?
[]
表示一个字符类。 ()
表示捕获组。
[a-z0-9]
-- 一个字符,位于a-z
或者 0-9
的范围内。
(a-z0-9)
-- 明确捕获 a-z0-9
。没有范围。
a
-- 可以被 [a-z0-9]
捕获。
a-z0-9
-- 可以被 (a-z0-9)
捕获,并且可以在替换和/或表达式的后面引用。
/[\s+]?,[\s+]?/
和/(\s+)?,(\s+)?/
有所不同。第一个表达式使用了字符集,匹配零个或一个空白字符和逗号,然后再匹配零个或一个空白字符。而第二个表达式使用了捕获组,匹配零个或一个连续的空白字符和逗号,然后再匹配另一个零个或一个连续的空白字符。 - Muhammad Umervar myStr = ' , '
,第一个表达式将不匹配,而第二个将匹配。如果你有另一个字符串如下:var myOtherStr = '+,'
,它将匹配第一个表达式但不匹配第二个表达式。 - Jeff Rupert+
是一个特殊字符。然而,在字符组内部(即 []
中的一组字符),+
会被视为普通字符来匹配。 - Jeff Rupert[]
构造在正则表达式中本质上是所有内容的|
的简写。例如,[abc]
匹配a、b或c。此外,-
字符在[]
内具有特殊含义,它提供了一个范围构造。[a-z]
将匹配任何字母a到z。
()
构造是一个分组构造,建立了一个优先级顺序(它还影响访问匹配的子字符串,但这是一个更高级的主题)。正则表达式(abc)
将匹配字符串"abc"。
[a-z0-9]
将匹配任何小写字母或数字。(a-z0-9)
将匹配精确字符串"a-z0-9"
并允许两个附加项:您可以将修饰符如*
和?
和+
应用于整个组,并且您可以在匹配后使用$1
或\1
引用此匹配。虽然在您的示例中不实用。
[a-z0-9]
将匹配abcdefghijklmnopqrstuvwxyz0123456789
中的一个字符。换句话说,方括号只匹配一个字符。
(a-z0-9)
将匹配两个字符,第一个是abcdefghijklmnopqrstuvwxyz
中的一个字符,第二个是0123456789
中的一个字符,就好像没有括号一样。()将允许您准确地读取匹配的字符。括号还可用于使用竖线|
字符对两个表达式进行OR运算。例如,(a-z|0-9)
将匹配一个字符--任何小写字母或数字。
(a-z|0-9)
将匹配字符串a-z
或0-9
,但不匹配a
或5
。 - Daniel Vandersluis