javascript - 从给定简单模板的示例字符串中提取值

标签 javascript

我想编写一个函数,例如:

function extract(template, example){
  //some magic
  return obj;
}

给出如下输入:

var template = "/some/path/{param_one}/{another_param}/etc?arg1={value}";
var example = "/some/path/foo/bar/etc?arg1=baz";

将返回此对象:

{param_one: "foo", another_param: "bar", value: "baz"}

我无法控制模板或示例(例如,我无法将模板更改为具有命名捕获组的正则表达式)。我可以放心地假设给定的示例将与模板匹配。

首先,我能够通过以下方式提取 key :

var re = /\{(.+?)\}/g;
var match;
do {
    match = re.exec(template)
    if (match) {
        console.log(match[1]);
    }
} while (match);

最佳答案

我使用正则表达式和替换来解决:

function extract(template, example){
  //some magic
  var re = /(?:([^\{]*)\{([^\}]*)\})/g;
  var result = example;
  var params = [];
  var match, values, obj = {};
  do {
    match = re.exec(template)
    if (match) {
      result = result.replace(match[1], '|');
      params.push(match[2]);
    }
  } while (match);
  values = result.split('|');
  for(var i=0;i < params.length; i++) {
    obj[params[i]] = values[i+1];
  }
  return obj;
}

首先,它使用正则表达式获取参数部分和文本部分,然后用 | 替换所有文本部分并将 key 存储到参数数组中。

最后,它循环遍历从上面分割的参数数组和匹配值

希望这有帮助

关于javascript - 从给定简单模板的示例字符串中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44170972/

相关文章:

javascript - 在javascript中按数字随机化颜色

javascript - 有没有更简单的方法来显示/隐藏鼠标操作上的元素?

javascript - index.js :1 Material-UI: The key `selectLabel` provided to the classes prop is not implemented in ForwardRef(TablePagination)

javascript - 嵌套使用material-ui v1的withStyles

javascript - 当必须传递参数时,在nodejs中以干净的方式到达 "require"

javascript - 通过类名获取div并在javascript中返回它

javascript - 将 JSON 对象放入带有 th 标签的 thymeleaf 中

javascript - 如何在 create()、update() 上从 angularjs-rails-resource 获得确认或回调

javascript - 使用 JWT 身份验证重新连接断开的 socket.io

javascript - 使用 Jquery 数据表的复杂列宽