如何将此字符串与范围分开?

时间:2016-12-16 09:44:48

标签: javascript string

我有一串这样的数字:

var string= "1,2,3,4-8,15,17,18-21,22";

如何将其拆分为形成的数组:[1,2,3,4,5,6,7,8,15,17,18,19,20,21,22]

更新:好的,代码即将出现...试图让jsfiddle up。

var mystring= "1,2,3,4-8,15,17,18-21,22";

var array1= mystring.split(",");
document.getElementById("output").innerHTML=array1;
var array2 = searchStringInArray ("-", array1);
document.getElementById("output2").innerHTML=array2;


function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

所以在这附近我陷入困境,并且认为应该有更好的方法。我知道你必须在数组中搜索连字符分割字符串。但是我没能把它们放到另一个数组中,然后我可以插入到第一个数组中。

https://jsfiddle.net/08au43ka/

5 个答案:

答案 0 :(得分:3)

 <html>
    <head>
        <title>tasks</title>
    </head>
    <body>
    {% if tasks %}
    <ul>
    {% for task in tasks %}
        <li> {{task.id}} : {{ task.result }}</a></li>
    {% endfor %}
    </ul>
    <p>It works!</p>
   {% else %}
    <p>No tasks are available.</p>
   {% endif %}

    </body>
</html>

答案 1 :(得分:2)

您可以先用逗号分割,然后用减号分割,然后将整个分割为一个新的数组,内部循环为缺失值。

&#13;
&#13;
var string = "1,2,3,4-8,15,17,18-21,22",
    result = string.split(',').reduce(function (r, a) {
        var b = a.split('-').map(Number);
        do {
            r.push(b[0]);
            b[0]++;
        } while (b[0] <= b[1]);
        return r;
    }, []);
        
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 2 :(得分:2)

您只需替换范围:

&#13;
&#13;
var string = "1,2,3,4-8,15,17,18-21,22"

var regexRanges = /(\d+)-(\d+)/g;
var getRangeValues = function(range, start, end) {
    return Array(end - start + 1).fill(+start).map((x, i)=> x + i);
};

var result = JSON.parse('[' + string.replace(regexRanges, getRangeValues) + ']');
console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:1)

&#13;
&#13;
MyType
&#13;
&#13;
&#13;

答案 4 :(得分:0)

由于没有已知的方法让我达到你想要的最有可能,你需要自己编写。

我用逗号分割了那个字符串,然后我遍历数组寻找包含破折号的内容,如果它包含破坏抓取该数组项,解析它 左侧,右侧,创建从i = lefti<right的循环,将项目推送到原始数组。