首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用正则表达式,点组(.+?)提取`<key>=<value>`对不与可选空格(\s)合作

用正则表达式,点组(.+?)提取`<key>=<value>`对不与可选空格(\s)合作
EN

Stack Overflow用户
提问于 2013-10-25 18:27:40
回答 2查看 27.8K关注 0票数 3

我有这个字符串:

代码语言:javascript
复制
metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475

我希望从中提取键和值对:<key>=<value>

代码语言:javascript
复制
/(\w+)=(.+?)\s/g

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

代码语言:javascript
复制
[
    "metadata=1.2 ",
    "name=stone:supershare "
],
[
    "metadata",
    "name"
],
[
    "1.2",
    "stone:supershare"
]

现在,很明显,我们应该使\s查找成为可选的:

代码语言:javascript
复制
/(\w+)=(.+?)\s?/g

不过,只从value中提取第一个符号就会让人抓狂

代码语言:javascript
复制
[
    "metadata=1",
    "name=s",
    "UUID=e"
],
[
    "metadata",
    "name",
    "UUID"
],
[
    "1",
    "s",
    "e"
]

我有点迷路了,我到底做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-25 18:37:09

由于\s不是必需的,因此前一部分(.+?)可以自由匹配一个字符,这也是由于?的缘故它将尝试做的事情。您可以执行以下任一操作:

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

Stack Overflow用户

发布于 2013-10-25 18:58:30

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

代码语言:javascript
复制
/(\w+)=([^\s]+)/g

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

Regex101 Demo

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19587328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档