我有这个字符串:
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"
]
我有点迷茫,我在这里做错了什么?
答案 0 :(得分:3)
@acfrancis解释是正确的,另一方面你可以尝试以下方法:
/(\w+)=([^\s]+)/g
这与原始表达式中使用<key>
的{{1}}相匹配,但随后使用(\w+)
匹配该值,该([^\s]+)
消耗一个或多个不是空格的字符。
答案 1 :(得分:2)
由于\s
不是必需的,因此前一部分(.+?)
可以自由匹配由于?
而尝试执行的一个字符。你可以:
(.+?)
更改为(.+)
但如果您的值可以包含空格或\s?
更改为(?:\s|$)