我有这个字符串:
metadata=1.2 name=stone:supershare UUID=eff4e7bc:47aea5cf:0f0560f0:2de38475我希望从中提取键和值对:<key>=<value>。
/(\w+)=(.+?)\s/g正如预期的那样,这不会返回UUID对,因为后面没有空格:
[
"metadata=1.2 ",
"name=stone:supershare "
],
[
"metadata",
"name"
],
[
"1.2",
"stone:supershare"
]现在,很明显,我们应该使\s查找成为可选的:
/(\w+)=(.+?)\s?/g不过,只从value中提取第一个符号就会让人抓狂
[
"metadata=1",
"name=s",
"UUID=e"
],
[
"metadata",
"name",
"UUID"
],
[
"1",
"s",
"e"
]我有点迷路了,我到底做错了什么?
发布于 2013-10-25 18:37:09
由于\s不是必需的,因此前一部分(.+?)可以自由匹配一个字符,这也是由于?的缘故它将尝试做的事情。您可以执行以下任一操作:
(.+?)更改为(.+),但如果您的值可以包含空格或\s?更改为(.+),则这可能会导致其他问题发布于 2013-10-25 18:58:30
@acfrancis的解释是正确的,另一方面,您可以尝试以下操作:
/(\w+)=([^\s]+)/g这与原始表达式中使用(\w+)的<key>匹配,但随后它使用([^\s]+)匹配该值,该值使用一个或多个非空格字符。
Regex101 Demo
https://stackoverflow.com/questions/19587328
复制相似问题