首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中用正则表达式从字符串中提取键值

在JavaScript中用正则表达式从字符串中提取键值
EN

Stack Overflow用户
提问于 2017-02-26 09:03:56
回答 4查看 3.4K关注 0票数 1

我需要一个函数从如下字符串中提取键值:

我想做一个标准的函数来提取任何值。调用如下:var name=ExtractValue(文本,"Name");

这是我的方法:

代码语言:javascript
复制
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 "";
    }
}

我该怎么做?耽误您时间,实在对不起!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-26 09:18:18

你可以这样做:

代码语言:javascript
复制
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条件总是错误的。

请注意,当没有匹配时,execmatch将返回null,因此不应假定存在length属性。

票数 3
EN

Stack Overflow用户

发布于 2017-02-26 09:41:10

此方法返回具有所有已找到的键/值对的对象。从那里,你可以搜索任何你想要的钥匙。

代码语言:javascript
复制
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;
}

票数 0
EN

Stack Overflow用户

发布于 2017-02-26 10:53:44

您可以使用字符串拆分函数来代替regex。

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42466621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档