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

标签 javascript regex

我希望在正则表达式中使用数字查找并运行一个循环,使用第一个数字作为起点,最后一个数字作为终点,并仅使用 javascript 核心对象、方法或函数编写一些文本。 假设我有一个形式为 '<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);
            }

但它返回

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"4"/<disp-formula id="deqn15-17">
rid"5"/<disp-formula id="deqn15-17">
rid"6"/<disp-formula id="deqn15-17">
rid"7"/<disp-formula id="deqn15-17">
rid"8"/<disp-formula id="deqn15-17">
rid"9"/<disp-formula id="deqn15-17">
rid"15"/<disp-formula id="deqn4-9">
rid"16"/<disp-formula id="deqn4-9">
rid"17"/<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">', '<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);
}

错误是

var a2 = my_arr[1];

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

my_arr = myRegexp.exec(myString);

现在将进入下一场比赛,并在他们的上方打印 myString[idx]

现在,如果您引用this MDN blog,我做了什么更改才能使其正常工作你会看到这部分

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]);
}

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

idx++
my_arr = myRegexp.exec(myString);

现在 my_arr 将进入下一场比赛

关于javascript - 如何在 javascript 循环中使用正则表达式匹配组中的数字范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782714/

相关文章:

javascript - 我怎样才能 robuSTLy 检测 node.js 中的相对路径

javascript - 如何使用正则表达式查找和替换第 n 个字符出现?

php - 正面回顾与匹配重置 (\K) 正则表达式功能

regex - 如何使用正则表达式负前瞻

javascript - 为什么我的 Regex 使用 "++"而不是任何其他特殊字符组合创建内部服务器错误?

javascript - 带八位字节通配符和范围的 IP 地址

javascript - 在对象数组中搜索类似的字符串

javascript - 初始化 JavaScript 函数数组

jquery - 用于从逻辑表达式中提取操作数和运算符以及括号的正则表达式

javascript - 从javascript中的字符串中获取2的组合