javascript - 如何突出显示任意数量的(可能重复的)A,后跟非贪婪匹配器,然后是任意数量的 B 等(没有不合理的限制)?

标签 javascript regex string highlight

下面的示例是我想要的突出显示类型的演示(对于 "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>

这里的问题显然是 $nn=9 的限制。但是,如果我想对四个以上的字符执行此操作(即没有不合理限制)怎么办?怎么解决这个问题?

最佳答案

尝试使用 function as a parameterreplace()

这更像是 @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/

相关文章:

javascript - 从 url 中提取 vimeo 视频 ID

regex - 使用正则表达式和排序的 Mongodb 简单前缀查询很慢

java - 数组只检测输入单词的一部分而不是整个单词

java - 在 Eclipse 中对齐多行 Java 字符串

regex - 正则表达式限制所有小于 100 个字符的字母

python 反向 string::-1 等价切片函数

javascript - 使用 Javascript 更改 CSS 类

javascript - .net mvc 中的 ajax 请求上未显示 json 对象

javascript - 设置值正在更改键名

javascript - 逐一淡入div内容