使用带有N个大括号的javascript解析字符串

时间:2017-08-22 04:32:40

标签: javascript regex

我有以下要解析的字符串

{field1=17/08/2017|field2=17/08/2017|field2=17/08/2017|field3=17/08/2017}
{field4 =Fijian|field5=English,Fijian}

现在这里有两个字符串,用大括号{}但也可能有N个字符串,第一个字符串的结尾和下一个字符串的开头之间的分隔符无法确定,因为有时它可以用car括起来有时可能会在同一行返回。

我想要的是像field1="17/08/2018"这样的字段明智的价值,等等。

有人可以帮助我解决这个问题的最佳解决方法吗?

3 个答案:

答案 0 :(得分:0)

您正在寻找 regular expression 正则表达式。具体来说,我认为你正在寻找/field(\d)+=(\w|,|\/)+/g

打破这个局面:

  • field检查文字field
  • (\d)+检查一个或多个数字
  • =检查文字=
  • (\w|,|\/)+检查一个或多个单词字符,逗号或正斜杠
  • 全局标记g表示应返回所有匹配项

您可以通过在字符串上运行.match()并将正则表达式作为参数传递来检查:

var string = "{field1=17/08/2017|field2=17/08/2017|field2=17/08/2017|field3=17/08/2017}";
var string2 = "{field4=Fijian|field5=English,Fijian}";

var regex = /field(\d)+=(\w|,|\/)+/g;

console.log(string.match(regex));
console.log(string2.match(regex));

希望这有帮助! :)

答案 1 :(得分:0)

您可以这样做:



var strOne  = "{field1=17/08/2017|field2=17/08/2017|field2=17/08/2017|field3=17/08/2017}";
var strTwo = "{field4 =Fijian|field5=English,Fijian}";
   
strOne = strOne.replace("{","");
strOne = strOne.replace("}","");
var strArrayOne = strOne.split("|");
console.log(strArrayOne);

strTwo = strTwo.replace("{","");
strTwo = strTwo.replace("}","");
var strArrayTwo = strTwo.split("|");
console.log(strArrayTwo);

  




答案 2 :(得分:0)

拆分字符串, reduce 进入field键值对列表 - 请参阅下面的演示:



var string = `{field1=17/08/2017|field2=17/08/2017|field2=17/08/2017|field3=17/08/2017} 
{field4 =Fijian|field5=English,Fijian}`;

var result = string.replace(/[\n\s]/g, '') // replace newline and space
  .split(/}{/) // split the string
  .reduce(function(p, c) {
    return p.concat(c.replace(/[{}]/g,'').split('|'));
  }, []);
  
console.log(result);

.as-console-wrapper{top:0;max-height:100%!important;}




更简单的解决方案是将}{替换为|,然后拆分 - 请参阅下面的演示:



var string = `{field1=17/08/2017|field2=17/08/2017|field2=17/08/2017|field3=17/08/2017} 
{field4 =Fijian|field5=English,Fijian}`;

var result = string.replace(/[\n\s]/g, '') // replace newline and space
  .replace(/}{/,'|').replace(/[{}]/g,'')
  .split('|');
  
console.log(result);

.as-console-wrapper{top:0;max-height:100%!important;}