使用javascript从文本字符串创建数组,并根据需要操作数据

使用javascript从文本字符串创建数组,并根据需要操作数据,javascript,arrays,Javascript,Arrays,我有文本字符串paten(_-code:value,_-code:value,_-code:value,_-code:value,) 它可以是这样的_cvgx12:volvo,_ccc325:hello我的名字是andrius,_asc789:sport,_code:这是文本字符串的示例 我需要从这个字符串创建数组。在数组中,我只希望包含值 myarray=[“值”、“值”、“值”、“值”、“值”、] 价值可以是任何东西,例如 myarray=[“沃尔沃”,“你好,我的名字是安德里奥斯”,“运动

我有文本字符串paten(_-code:value,_-code:value,_-code:value,_-code:value,)

它可以是这样的_cvgx12:volvo,_ccc325:hello我的名字是andrius,_asc789:sport,_code:这是文本字符串的示例

我需要从这个字符串创建数组。在数组中,我只希望包含值

myarray=[“值”、“值”、“值”、“值”、“值”、]

价值可以是任何东西,例如

myarray=[“沃尔沃”,“你好,我的名字是安德里奥斯”,“运动”,“价值”,“萨克斯溢出”,]

我正在尝试这样的方法

拆分ext到数组myarray=mytext.Split(“”);//我不认为这个值是正确的

另外,我正在删除代码部分,如下所示:

        filtered = myarray.filter(function(el, index) {

                return index % 2 === 1;
              });

我正在获取数组,但我不能在单词之间使用空格,这可以做到:

var pattern = {
   "_cvgx12": "volvo",
   "_ccc325": "hello my name is andrius",
   "_asc789": "sport",
   "_code": "This is example of text string"
}

var myArray = [];
for(var prop in pattern){
    myArray.push(pattern[prop]);
}

非常简单,非常粗糙,但有效

根据您希望的严格程度,以下是一个起点:

str
    .replace(/^\(|\)$/)               // remove parens
    .split(',')                       // split on commas
    .map(function(entry) {            // then for each entry
        return entry.split(':')[1];   // split on colon and return 2nd half
    })
;

也许应该添加一些修剪。

您需要以某种方式解析字符串。你到底有多喜欢这个取决于你:我不知道你想要的确切语法,但取决于你怎么做,这可能非常简单,也可能相当复杂。我做出以下假设和推论:

  • 代码-值对之间的实际分隔符是逗号(“,”),代码及其值之间的实际分隔符是冒号(:”)
  • 代码不能包含冒号,但值可以包含冒号
  • 代码不需要以下划线开头(尽管它们可以)
  • 没有办法避开冒号和逗号
  • 代码和值的前导和尾随空格将被忽略,但代码和值中的空格将被保留
  • 将忽略空项(例如,由字符串末尾的悬空“,”引起的)
  • 允许具有相同代码的多个项目
考虑到这些规则,我的解决方案如下:

function parse(input) {
    return String(input).split(',').reduce(function (result, item) {
        var parts;
        if (item.trim().length > 0) {
            parts = item.split(':');
            result.push(parts.slice(1).join(':').trim());
        }
        return result;
    }, []);
};
第一次拆分(第2行)得到代码-值对。然后,我们从第9行创建的空数组开始,对成对数组进行reduce(),以获得最终结果

第4行中对item.trim().length的检查确保我们忽略空项(如由悬空逗号创建的项)

在第5行中,我们在“:”上分开,但在第6行中,我们在第一个部分之后重新连接所有部分。这确保冒号中的任何值都保留在字符串中。如果我们不这样做,那么在第一个冒号之后的任何东西都会丢失

最后,推入式第6行确保分割的项目进入数组


如果您决定需要返回不同类型的对象,您可以通过修改传递给
reduce

的函数和值来添加语言标记来实现。
“Sackoverflow”
让我发笑,很好。那么您到底是在哪里被卡住的?你自己的尝试是如何成功的,还是失败的?出了什么问题?我认为模式是一个文本,而不是一个对象。哦,如果是这样的话,那么它是正则表达式的工作,为了使其工作,需要应用严格的规则。我会让OP澄清这一点。。