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.USER
和obj.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?