Regex 提取`<;键>=&书信电报;值>;`带有正则表达式、点组(.+;?)的对不与可选空格(\s)配合

Regex 提取`<;键>=&书信电报;值>;`带有正则表达式、点组(.+;?)的对不与可选空格(\s)配合,regex,pcre,Regex,Pcre,我有这个字符串: metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475 我希望从中提取键和值对:= 正如预期的那样,这不会返回UUID对,因为后面没有空格: [ "metadata=1.2 ", "name=stone:supershare " ], [ "metadata", "name" ], [ "1.2", "stone:supershare

我有这个字符串:

metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475
我希望从中提取键和值对:
=

正如预期的那样,这不会返回
UUID
对,因为后面没有空格:

[
    "metadata=1.2 ",
    "name=stone:supershare "
],
[
    "metadata",
    "name"
],
[
    "1.2",
    "stone:supershare"
]
现在,显然,我们应该使
\s
查找成为可选的:

/(\w+)=(.+?)\s?/g
不过,这完全是从
值中仅提取第一个符号:

[
    "metadata=1",
    "name=s",
    "UUID=e"
],
[
    "metadata",
    "name",
    "UUID"
],
[
    "1",
    "s",
    "e"
]

我有点迷路了,我在这里做错了什么?

由于不需要
\s
,前面的部分
(.+?)
可以自由地只匹配一个字符,因为
它将尝试这样做。您可以:

  • (.+?)
    更改为
    (.+)
    ,但如果您的值可以包含空格或空格,则可能会导致其他问题
  • \s?
    更改为
    (?:\s |$)

@acfrancis的解释是正确的,另一方面,您可以尝试以下方法:

/(\w+)=([^\s]+)/g
这与原始表达式中使用的
(\w+)
匹配
,但随后它与使用一个或多个非空格字符的
([^\s]+)
的值匹配


Bah,尝试了一个
\s |$
,但是是的,没有括号。这感觉更具可读性。你是对的,我应该使用非捕获参数。请参阅更新的答案。
/(\w+)=([^\s]+)/g