在JavaScript中使用regex从字符串中提取键值

时间:2017-02-26 09:03:57

标签: javascript regex

我需要一个函数来从字符串中提取键值:&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 "";
    }
}

我该怎么做? 谢谢你的时间!

4 个答案:

答案 0 :(得分:1)

你可以这样做:

&#13;
&#13;
"\s"
&#13;
&#13;
&#13;

不要忘记在字符串文字中逃避反斜杠。所以"s"代替length,因为后者与if完全相同。此外,正则表达式中缺少冒号。最后,您在exec属性名称中出现拼写错误,因此您的match条件始终为false。

请注意,nulllength会在没有匹配时返回{{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;
}

https://jsfiddle.net/ydjbc4yq/

答案 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})`)