Javascript “是什么?”^&引用;正则表达式是什么意思?

Javascript “是什么?”^&引用;正则表达式是什么意思?,javascript,regex,Javascript,Regex,我在看这个子表达式(这是JavaScript): 我知道?跟在字符后面时表示“零次或一次”,但不确定它在上下文中的含义。?:通常表示将组设为非捕获组。你可以做一些研究 我几乎肯定任何正则表达式引擎都应该这样做,但当我在引擎之间切换时,我会遇到一些怪癖 编辑:应该是这样的,非捕获似乎可以很好地工作。您可能在本文中看到了它 (?:...) 这意味着该组不会被捕获或用于反向引用 编辑:以反映修改后的问题: (?:^|....) 表示“匹配行首或匹配…”,但不要捕获组或将其用作反向引用。(?:某些内

我在看这个子表达式(这是JavaScript):


我知道跟在字符后面时表示“零次或一次”,但不确定它在上下文中的含义。

?:通常表示将组设为非捕获组。你可以做一些研究

我几乎肯定任何正则表达式引擎都应该这样做,但当我在引擎之间切换时,我会遇到一些怪癖


编辑:应该是这样的,非捕获似乎可以很好地工作。

您可能在本文中看到了它

(?:...)
这意味着该组不会被捕获或用于反向引用

编辑:以反映修改后的问题:

(?:^|....)
表示“匹配行首或匹配…”,但不要捕获组或将其用作反向引用。

(?:某些内容)
表示不希望单独匹配括号中的表达式。通常,在括号中分组的regexp片段是分组的,可以单独引用(这称为使用反向引用)

请参见“(?:x)匹配“x”,但不记得匹配。”


使用组时,通常有几个选项可以修改组的行为:

(foo)     // default behavior, matches "foo" and stores a back-reference
(?:foo)   // non-capturing group: matches "foo", but doesn't store a back-ref
(?i:foo)  // matches "foo" case-insensitively
(?=foo)   // matches "foo", but does not advance the current position
          // ("positive zero-width look-ahead assertion")
(?!foo)   // matches anything but "foo", and does not advance the position 
          // ("negative zero-width look-ahead assertion")
举几个例子

它们都以“?”开头,这是表示组修饰符的方式。在这种情况下,问号与可选性无关

它只是说:

(?:^foo)  // match "foo" at the start of the line, but do not store a back-ref
有时候,存储一个你无论如何都不会使用的对比赛某个部分的反向引用是一种过分的做法。当组只是为了使一个复杂表达式原子化(例如,它应该作为一个整体匹配或失败)时,存储一个反向引用是一种不必要的资源浪费,甚至会使正则表达式的速度减慢一点。有时候,你只想成为第一组与你相关的人,而不是正则表达式中的第一组。

简短回答 它将(插入的)组标记为一个组

有关此特定表达式的详细信息 非捕获组的符号为:

(?:<expresson>)
(?:)
在您介绍的实例中,插入符号(^)是表达式的一部分,而不是捕获组表示法的一部分。这个例子也不是一个特殊的角色

看起来他们正在使用带插入符号的“或”操作符(管道)。因此,他们希望匹配插入符号或管道右侧的任何内容,但不将表达式捕获为一个组(通过分组字符开头的
?:
完成)

一般来说
非捕获组允许您以一种不会被捕获的方式对表达式进行分组,同时也会提高表达式的性能。

插入符号不是反向引用表达式的一部分。@cynoclast:没错,但在回答问题时它是问题的一部分(问题已被修改)非常好-谢谢。不幸的是,由于使用的角色,RegEx是出了名的不适合谷歌搜索:)看起来像一个矛盾的猫王和一个蓬帕杜…:p:这非常有帮助。非常感谢。
(?:<expresson>)