下面的示例是我想要的突出显示类型的演示(对于 "a"
、"b"
、"c"
和 "d"
):
var reg = new RegExp("(.*?)([a]{1,})(.*?)([b]{1,})(.*?)([c]{1,})(.*?)([d]{1,})(.*?)", "gi");
var txt = "OK, abacd, abcdt, yaaaxxbyycccczzddddg0011".replace(reg,
'$1<mark>$2</mark>$3<mark>$4</mark>$5<mark>$6</mark>$7<mark>$8</mark>$9');
document.getElementById("test").innerHTML = txt;
<body>
<div id="test"></div>
</body>
这里的问题显然是 $n
中 n=9
的限制。但是,如果我想对四个以上的字符执行此操作(即没有不合理限制)怎么办?怎么解决这个问题?
最佳答案
尝试使用 function as a parameter在replace()
这更像是 @WiktorStribiżew 提到的动态模式
var reg = new RegExp(["a", "b", "c", "d"].map(a => "([" + a + "]{1,})(.*?)").reduce((a, i) => a + i, "(.*?)"), "gi");
var txt1 = "OK, abacd, abcdt, yaaaxxbyycccczzddddg0011"
.replace(reg, (m, ...p) => {
p.pop();//pop string
p.pop();//pop offset
return p.reduce((a, i, ix) => a + (ix % 2 ? "<mark>" + i + '</mark>' : i), '')
});
var txt = "OK, abacd, abcdt, yaaaxxbyycccczzddddg0011"
.replace(reg, (m, ...p) => {
p.pop();
p.pop();
return "<br><br>-match-" + m + p.reduce((a, i, ix) => a + "<br>-substring-" + (ix % 2 ? i : "-h-" + i), '')
});
document.getElementById("test").innerHTML = txt1 + txt;
<body>
<div id="test"></div>
</body>
关于javascript - 如何突出显示任意数量的(可能重复的)A,后跟非贪婪匹配器,然后是任意数量的 B 等(没有不合理的限制)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889675/