如何在javascript循环中使用正则表达式匹配组中的数字范围?

时间:2017-08-20 13:35:25

标签: javascript regex

我希望在正则表达式查找中使用数字,并使用第一个数字作为起点并使用最后一个数字作为结束点运行循环,并仅使用javascript核心对象,方法或函数编写一些文本。 假设我有一个 [Authorize] [Route("api/checkinvavail/{invstarttime}/{invendtime}/{invid}")] [HttpGet] public bool GetInvAvailability(DateTime invstarttime, DateTime invendtime,Guid invid) { InventoryBLL checkInv = new InventoryBLL(); bool isAvailable = checkInv.IsAvailable(invstarttime, invendtime,invid) return isAvailable; } 形式的字符串数组,并使用这个数组我想写下面的内容: 预期产出:

'<disp-formula id="deqn4-9">', '<disp-formula id="deqn15-17">' and so on..

基本上,它从数组中获取数字范围,并使用属于该范围的每个数字并以上述方式编写。 我尝试过以下代码:

rid"4"/<disp-formula id="deqn4-9">
rid"5"/<disp-formula id="deqn4-9">
rid"6"/<disp-formula id="deqn4-9">
rid"7"/<disp-formula id="deqn4-9">
rid"8"/<disp-formula id="deqn4-9">
rid"9"/<disp-formula id="deqn4-9">
rid"15"/<disp-formula id="deqn15-17">
rid"16"/<disp-formula id="deqn15-17">
rid"17"/<disp-formula id="deqn15-17">

但它返回

var myString = ['<disp-formula id="deqn4-9">', '<disp-formula id="deqn15-17">'];
            var myRegexp = /(\d+)-(\d+)/g;
            my_arr = myRegexp.exec(myString);
            while (my_arr != null) {
                var a1 = my_arr[0];
                var xs = a1.split("-");
                var new1=xs[0];
                var new2=xs[1];
                for (var i=new1; i<=new2; i++){
                    console.log('rid"'+i+'"/'+myString[0]);
                }
                var a2 = my_arr[1];
                var ys = a2.split("-");
                var _new1=xs[0];
                var _new2=xs[1];
                for (var j=_new1; j<=_new2; j++){
                    console.log('rid"'+j+'"/'+myString[1]);
                }
                my_arr = myRegexp.exec(myString);
            }

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我修改了你的代码

&#13;
&#13;
mProvider
&#13;
&#13;
&#13;

错误是

var myString = ['<disp-formula id="deqn4-9">', '<disp-formula id="deqn15-17">', '<disp-formula id="deqn99-100">', '<disp-formula id="deqn999-1001">'];
var myRegexp = /(\d+)-(\d+)/g;
my_arr = myRegexp.exec(myString);
var idx = 0;
while (my_arr != null) {
    var a1 = my_arr[0];
    var xs = a1.split("-");
    var new1=parseInt(xs[0]);
    var new2=parseInt(xs[1]);
    for (var i=new1; i<=new2; i++){
        console.log('rid"'+i+'"/'+myString[idx]);
    }
    idx++;
    my_arr = myRegexp.exec(myString);
}

这匹配了第一个捕获组(即4)而不是第二个匹配

var a2 = my_arr[1];

这将转移到下一场比赛,只需在他们的

上打印myString [idx]

现在我做了什么改变才能让它发挥作用,如果你引用this MDN blog,你会看到这部分

my_arr = myRegexp.exec(myString);

是没用的,所以我删除了它。现在我们将继续下一个idx,所以我做了

var a2 = my_arr[1];
var ys = a2.split("-");
var _new1=xs[0];
var _new2=xs[1];
for (var j=_new1; j<=_new2; j++){
    console.log('rid"'+j+'"/'+myString[1]);
}

现在my_arr将继续进行下一场比赛