JavaScript将一个stringparsing为对象

我正在parsing部分parsingstring值为string的对象。

我认为这样做的一个方法是多次调用substr() ,但如果有什么办法可以更清楚地做到这一点?

例如,当我inputstring

 USER='Howe', TEXT='foo' 

要么

 USER='HOWE' TEXT='foo' 

要么

 USER='HOWE',TEXT='foo' 

在函数之后,一个对象会是这样的:

 {USER:'HOWE, TEXT='foo'}; 

从我以前的答复重新工作 。

 function toObj(str) { const a = str.split(/[,\s]+/); return a.reduce((p, c) => { const kv = c.replace(/'/g, '').split('='); p[kv[0]] = kv[1]; return p; }, {}); } toObj("USER='Howe', TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } toObj("USER='Howe',TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } toObj("USER='Howe' TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } 

DEMO

这不是JSON的非常有效的对象语法。 你可以这样做:

 var text = '{ "USER":"Howe", "TEXT":"foo" }'; var obj = JSON.parse(text); console.log(text, obj); 

然后你可以通过obj.USERobj.TEXT简单地引用属性。

编辑:经过讨论…

如果您希望让用户能够在两个字段上进行search(当然,您可以根据需要扩展字段数)。

 <script> function search() { var userValue = document.getElementById('txtUser').value; var textValue = document.getElementById('txtText').value; var jsonText = '{ "USER":"' + userValue + '", "TEXT":"' + textValue + '" }'; console.log(jsonText); var json = JSON.parse(jsonText); console.log(json); // Do whatever you wish with your created object here... } </script> <input id="txtUser" value="foo" type="text"> <input id="txtText" value="bar" type="text"> <button onclick="search();">Submit</button> 

您可以使用正则expression式来parsinginputstring中的键和值:

 function convert(s) { var m = s.match(/USER='(.*)'.*TEXT='(.*)'/); return { USER: m[1], TEXT: m[2] } } console.log(convert("USER='HOWE' TEXT='foo'")); 

匹配expression式使用分组(在括号中包装“匹配”)来捕获值,然后结束于m数组中。

convert函数将返回一个JavaScript对象。 如果你想把它变成一个JSONstring,使用JSON.parse 。

JSBin: https ://jsbin.com/fefufehibo/edit ? js,console

如果你真的只是想把这两个值分割到一个数组中,你可以这样做:

 str.split(','); 

但它实际上听起来像你想要改变它的对象与键,值对,而不是一个数组。

你可以说得更详细点吗? 什么是你想要parsing的确切string?