【问题标题】:Create array based on instance of delimiter/square-brackets基于分隔符/方括号的实例创建数组
【发布时间】:2013-11-29 09:32:15
【问题描述】:

我有一个字符串,我想创建一个偶数出现“[​​]”的数组

"Match[0][a][5][b][0][d][2]"

我想根据“[]”的实例将它们拆分并使用此字符串创建一个数组。数组的每个元素必须有 2 次出现“[]”,并且下一个元素还有两次出现“[]”。换句话说,我想创建一个偶数出现“[​​]”的数组

我想用这样的字符串创建一个数组:

["Match[0]['a']", "Match[0]['a'][5]['b']", "Match[0]['a'][5]['b'][0]['d']"]

使用 javascript/jQuery

我已经尝试过匹配,但我只能做到这一点。

// ['part1.abc', 'part2.abc', 'part3.abc', 'part4']
'part1.abc.part2.abc.part3.abc.part4'.match(/[^.]+(\.[^.]+)?/g);

【问题讨论】:

  • 您的输入之一的预期输出是什么?
  • ["Match[0]['a']", "Match[0]['a'][5]['b']", "Match[0]['a' ][5]['b'][0]['d']"]
  • 无法直接从 (JS) 正则表达式中获取。您不能从同一个起始位置获得多场比赛。您可以自己构建结果,这可以在正则表达式的帮助下完成。
  • @Qtax 我想用 JS 来做,我们可以循环它做这个吗?你能给我看个样本吗

标签: javascript jquery regex arrays string


【解决方案1】:

您可以获取数组中的各个部分,然后对结果进行操作,直到它具有您想要的形式。一个例子可能是这个:

var str = "Match[0][a][5][b][0][d][2]";

var result = [];
str.split(/[\]\[]{1,2}/).slice(0,-1).reduce(function(acc,item, index) {        
  acc += '[' + (isNaN(item) ? "'" + item + "'" : item) + ']';
  if (index %2 === 0 && index !== 0) {
    result.push(acc);
  }
  return acc;
});

console.log(result) // ["Match[0]['a']", "Match[0]['a'][5]['b']", "Match[0]['a'][5]['b'][0]['d']"] 

【讨论】:

    【解决方案2】:

    您可以使用match(/\[.\]/g) 获取每个括号,然后通过将两个相加来组成您的数组。

    var matches = "Match[0][a][5][b][0][d][2]".match(/\[(.)\]/g);
    var result = [];
    for (var i = 0; i < matches.length; i += 2) {
        var brackets = '';
        for(var j = 0; j< i; j++) {
            brackets += matches[j];
        }
        result.push("Match" + brackets);
    }
    result.shift();
    

    【讨论】:

    • 匹配总是第一个单词吗?
    • 不是动态生成的
    • 这是否总是以某个单词后跟一对括号的偶数列表的形式?
    【解决方案3】:

    哇它的乐趣:) ... 尝试 api 并看看每个人是如何解决它的。 This is what i tried看看有没有帮助。

    str = "STR[1][3][4d][re]"
    
    var re=/\[\w+\]/g;
    
    var mat = str.match(re);
    var ar = [];
    
    for(i=2; i<= mat.length; i=i+2){
    ar[ar.length] = "STR" + mat.slice(0,i).join("")
    }
    console.dir(ar)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2021-12-23
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多