我希望在正则表达式中使用数字查找并运行一个循环,使用第一个数字作为起点,最后一个数字作为终点,并仅使用 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/