我需要一个函数从如下字符串中提取键值:
我想做一个标准的函数来提取任何值。调用如下:var name=ExtractValue(文本,"Name");
这是我的方法:
var text="<!-- Name:Peter Smith --><!-- Age:23 -->"; // Data to be scanned
var name=ExtractValue(text,"Name"); // Get the "Name" key value
var age=ExtractValue(text,"Age"); // Get the "Age" key value
document.getElementById("result").innerHTML = "Extracted name: ("+name+"), age: ("+age+")";
// Function for extranting key values
function ExtractValue(data,key){
// It's try to be like /Name:(.*)\s--/
var rx = "/"+key+"(.*)\s--/";
var values = rx.exec(data);
if(values.lenght>0){
return values[1];
} else{
return "";
}
}我该怎么做?耽误您时间,实在对不起!
发布于 2017-02-26 09:18:18
你可以这样做:
var text="<!-- Name:Peter Smith --><!-- Age:23 -->"; // Data to be scanned
var name=ExtractValue(text,"Name"); // Get the "Name" key value
var age=ExtractValue(text,"Age"); // Get the "Age" key value
console.log("Extracted name: ("+name+"), age: ("+age+")");
function ExtractValue(data,key){
var rx = new RegExp(key + ":(.*?)\\s+--");
var values = rx.exec(data); // or: data.match(rx);
return values && values[1];
}
不要忘记在字符串文本中转义反斜杠。因此,"\\s"而不是"\s",因为后者与"s"完全相同。此外,您的正则表达式中缺少冒号。最后,您在length属性名中出现了拼写错误,因此您的if条件总是错误的。
请注意,当没有匹配时,exec和match将返回null,因此不应假定存在length属性。
发布于 2017-02-26 09:41:10
此方法返回具有所有已找到的键/值对的对象。从那里,你可以搜索任何你想要的钥匙。
var text = "<!-- Name:Peter Smith --><!-- Age:23 --><!-- Key with space : yes -->";
var data = ExtractData(text);
console.log(data);
console.log("Extracted name: (" + data["Name"] + "), age: (" + data["Age"] + ")");
function ExtractData(data) {
var matches = data.match(/([A-Za-z\s]+:[^\-\-\>]+)/g);
var data = {};
if (Array.isArray(matches)) {
matches.forEach(function(match) {
var pair = match.split(":");
if (pair.length === 2) {
data[pair[0].trim()] = pair[1].trim();
}
});
}
return data;
}
发布于 2017-02-26 10:53:44
您可以使用字符串拆分函数来代替regex。
var text = "<!-- Name:Peter Smith --><!-- Age:23 -->"; // Data to be scanned
var obj = ExtractToObj(text);
document.getElementById("result").innerHTML = "Extracted name: (" + obj["Name"] + "), age: (" + obj["Age"] + ")";
function ExtractToObj(data) {
var obj = {};
var kvps = data.split("-->").filter(function(n) {
return n !== ""; // remove empty elements
});
for (var i = 0; i < kvps.length; i++) {
var kvp = kvps[i].split(":");
var key = kvp[0].replace("<!--", "").trim();
var value = kvp[1].trim();
obj[key] = value;
}
return obj;
}https://stackoverflow.com/questions/42466621
复制相似问题