如何在冒号和空间之间进行正则表示?

时间:2014-05-22 18:55:05

标签: javascript regex

我有这个字符串

product_id:WDC WD2500YS-18S revision:6C07 size(GB):232 state: ONLINE

我需要转换为其他任何内容,例如json:

{
  "product_id": "WDC WD2500YS-18S",
  "revision": "6C07",
  "size(GB)": "232",
  "state": "ONLINE"
}

我试过这个/([^:]+)/g但是没有用,因为我需要 WD2500YS-18S WDC WD2500YS-18S 一起使用。

3 个答案:

答案 0 :(得分:2)

您必须使用密钥不包含空格的事实,并使用前瞻检查后面的内容。

/([^\s:]+):\s*([^:]+?)(?=\s+[^\s:]+:|\s*$)/g

答案 1 :(得分:2)

此解决方案不依赖于前瞻或外观,并利用浏览器的内置json解析器来验证输出是否有效。它利用了不包含空格的事实。所以([^ ]+):会找到一把钥匙。我们只用引号包装键和值,让内置的json解析器完成剩下的工作。

var input = 'product_id:WDC WD2500YS-18S revision:6C07 size(GB):232 state: ONLINE';
console.log(JSON.parse(
  '{' +
  input.replace(/(^| )([^ ]+):/g,'","$2":"').substring(2) +
  '"}'
));

输出:

{
product_id: "WDC WD2500YS-18S",
revision: "6C07",
size(GB): "232",
state: " ONLINE"
} 

答案 2 :(得分:1)

尝试/([^:]+):\s?([^:]+)(?:\s|$)/g - regex101