从JavaScript中的字符串中使用'='提取变量的最佳方法是什么

时间:2018-10-10 18:55:13

标签: javascript regex

我想从这样的字符串中提取变量名称:"foo=valor bar=second",依此类推。

要返回:

{ 
   foo: "valor", 
   bar: "second",
   ...
}

4 个答案:

答案 0 :(得分:2)

您可以使用Regex Look Aheads来检查以=符号开头的变量名

var str = "foo=valor bar=second";
var varRegex = /\w+(?=(\s)*(\=))/g;
var valueRegex = /(?<=(\=)[\s'"]*)\w+/g;

var varArr = str.match(varRegex);
var valueArr = str.match(valueRegex);
console.log(valueArr);

let obj = {};
for(let i in varArr) {
  obj[varArr[i]] = valueArr[i];
}

console.log(obj);

答案 1 :(得分:1)

var str = "foo=valor,bar=second";

var obj = {};

str.split(",").forEach(
     function(item){
     if(item){ 
        var vars = item.split("="); 
        obj[vars[0]] = vars[1] 
      }
 });
 console.log(obj)

答案 2 :(得分:0)

与上一个答案不同的方法:您可以将字符串拆分为空格,然后映射结果数组,以等号拆分以创建对象(左侧是属性,右侧是值)

如果您需要它的特定格式,可以减少它以将数组转换为具有所有值的一个大对象

with open ("installed_packages.txt", "rt", "\r") as installed_packages:
    for lines in installed_packages:
        print(lines)

答案 3 :(得分:0)

不一定是最快的答案(就提交速度而言),但是维护的正则表达式较少,存储的变量较少。

function toJSON(str) {
  const regex = /(\w+)\=(\w+)\s*/g;
  let result = {};
  let match;

  while (match = regex.exec(str)) {
    result[match[1]] = match[2];
  }

  return result;
}

console.log(toJSON("foo=valor bar=second"));