如何使用正则表达式捕获组

时间:2015-10-02 10:56:50

标签: javascript regex

我有一个字符串:

tel:+13172221234;foo=1234;bar=000-000-000;wombat=mydomain.com

请注意,该字符串始终以tel:+{{some-number}}开头。我想要捕获,以便我有以下内容:

+13172221234
foo
1234
bar
000-000-000
wombat
mydomain.com

我拥有的是: ([^?=&;]+)=([^;]*) ,它返回三个匹配项,每个匹配项都有一个变量和一个值(即foo / 1234)。但是我似乎无法捕捉到前面的数字。我认为只需将tel:(\w+)放在前面即可,但它不起作用。

https://regex101.com/r/cM2pQ5/2

任何人都可以提供帮助吗?也许我应该做两个单独的正则表达式?

4 个答案:

答案 0 :(得分:4)

您可以使用这个基于前瞻性的正则表达式:

([^:?=&;]+)(?=[=;])(?:=([^;]*))?

RegEx分手:

(             # Start of capture group #1
   [^:?=&;]+  # Match 1 or more char of anything but ? or = or & or ;
)             # End of capture group #1
(?=           # Start of positive lookahead
   [=;]       # to assert next position is either = or ;
)             # End of positive lookahead
(?:           # Start of "optional" non-capturing group
   =          # match literal =
   (          # Start of capture group #2
      [^;]*   # match 0 or more of any char that is not a ;
   )          # End of capture group #2
)?            # Start of non-capturing group. ? in the end makes it optional

RegEx Demo

答案 1 :(得分:2)

您可以面对或=:作为键/值分隔符,我建议您这样做:

([^?=&;]+)(=|:)([^;]*)

答案 2 :(得分:1)

我只想匹配这个:

[^;=]+

答案 3 :(得分:1)

这是另一种方式:(regex101

^tel:([^;]+)|;([^=]+)=([^;]+)

这有两个部分 - 第一部分仅匹配字符串的开头,第二部分匹配其余的键值对。我假设你的字符串以tel:

开头