我正在解析部分來解析字符串值到一個對象的字符串。JavaScript解析一個字符串到對象
我想到了一個辦法做到這一點呼籲substr()
幾次,但如果有任何辦法做到這一點更清楚?
例如,當我輸入的字符串
USER='Howe', TEXT='foo'
或
USER='HOWE' TEXT='foo'
或
USER='HOWE',TEXT='foo'
的功能後,對象會是這樣:
{USER:'HOWE, TEXT='foo'};
我正在解析部分來解析字符串值到一個對象的字符串。JavaScript解析一個字符串到對象
我想到了一個辦法做到這一點呼籲substr()
幾次,但如果有任何辦法做到這一點更清楚?
例如,當我輸入的字符串
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" }
非常感謝你,這是一個很好的解決方案 –
如果你真的只是想在這兩個值拆分到一個數組,你可以這樣做:
3210但實際上聽起來像是你想用鍵,值對將它改變成一個對象,而不是一個數組。
你能更具體嗎?什麼是你想要解析的確切字符串?
我剛剛更新這個問題,我想要的是將字符串解析爲一個帶有索引和鍵的對象,非常感謝你 –
這不是JSON的非常有效的對象語法。你可以做這樣的:
var text = '{ "USER":"Howe", "TEXT":"foo" }';
var obj = JSON.parse(text);
console.log(text, obj);
然後你就可以通過obj.USER
和obj.TEXT
只是參考性質。
編輯:經過討論...
我建議做一些像下面這樣,如果你想讓用戶對兩個字段進行搜索的能力(可以延長該儘可能多的領域你當然希望)。
<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>
字符串實際上是用戶執行搜索功能的。所以我不希望用戶輸入JSON語法之類的語法。 –
所有你需要的就是從用戶那裏獲取值並自己構造JSON文本。不要讓你的用戶輸入那樣的文字。兩個文本框,獲取值,構建JSON文本,解析它,完成工作:) – ManoDestra
好的,我正在爲我的web應用程序實現一個搜索模塊,並且有一個搜索欄就像Twitter一樣,我想支持高級搜索功能..這就是爲什麼我問這個問題..我知道你的建議是一個更好的解決方案..但我不是一個有經驗的JavaScript編碼器,所以.. –
您可以使用正則表達式來解析出從輸入字符串鍵和值:
function convert(s) {
var m = s.match(/USER='(.*)'.*TEXT='(.*)'/);
return {
USER: m[1],
TEXT: m[2]
}
}
console.log(convert("USER='HOWE' TEXT='foo'"));
的match表達式使用分組(包裹在括號中的「匹配」)來捕獲值,然後結束於m
陣列。
convert
函數將返回一個JavaScript對象。如果您希望將其轉換爲JSON字符串,請使用JSON.parse。
我有點困惑。你是說你想將多次出現的'USER'和'TEXT'分組爲每個對象的數組?所以'USER ='HOWE',TEXT ='foo',USER ='2',TEXT ='3''將會是'[{USER:'HOWE',TEXT:'foo'},{USER:'2' ,TEXT:'3'}]' – ste2425
你能澄清一下嗎?你想使用array.push(string)將一個字符串添加到數組中嗎?或使用object.property = string更改對象中某個條目的值; ? – Iblob
對不起,只是編輯問題,我想解析一個字符串到索引和屬性的對象,謝謝。 @ ste2425 –