我需要一个函数来从字符串中提取键值:&lt;! - 名称:Peter Smith - &gt;&lt;! - 年龄:23 - &gt; < / p>
我想制作一个标准函数来提取任何值。调用是这样的: var name = ExtractValue(text,&#34; Name&#34;);
这是我的方法:
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 "";
}
}
我该怎么做? 谢谢你的时间!
答案 0 :(得分:1)
你可以这样做:
"\s"
&#13;
不要忘记在字符串文字中逃避反斜杠。所以"s"
代替length
,因为后者与if
完全相同。此外,正则表达式中缺少冒号。最后,您在exec
属性名称中出现拼写错误,因此您的match
条件始终为false。
请注意,null
和length
会在没有匹配时返回{{1}},因此您不应该假设有{{1}}属性。
答案 1 :(得分:0)
此方法返回具有所有找到的键/值对的对象。从那里,您可以搜索您想要的任何密钥。
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
答案 2 :(得分:0)
您可以使用字符串拆分功能代替正则表达式。
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;
}
答案 3 :(得分:0)
我会做这样的事情:
Visual studio RC 2017
或者如果您只想提取一个属性:
const data = `<div><!-- Name : Peter Smith --><!-- Age:23 -->some test data that is not found</div>`
const getData = data => {
const obj = {}, regex = /<!--\s*(.*?)\s*:\s*(.*?)\s*-->/g
let temp
while (temp = regex.exec(data)){
obj[temp[1]] = temp[2]
}
return obj
}
const personInfo = getData(data)
console.log(`Extracted name: (${personInfo.Name}), age: (${personInfo.Age})`)