JS和正则表达式,用于替换double =标记中的所有内容

时间:2018-12-20 01:44:20

标签: javascript regex github-pages

我正在尝试在GitHub页面上写博客。但是GFM不像typora那样支持突出显示文本。我想做的是在一对“ ==”之间匹配所有内容(包括换行符)。因此,应选择以下文本

Edit the ==Expression=
== & T==sa==ext to see matches.

并更改为

Edit the <span class="highlight">Expression=
</span> & T<span class="highlight">sa</span>ext to see matches.

我要问的是

  1. 我应该使用什么正则表达式来匹配?我有={2}[^=]*={2},但那是不对的。
  2. 有没有可以代替的简单js?我希望我的网站使用尽可能少的JS。

非常感谢!

5 个答案:

答案 0 :(得分:4)

您可以使用反向引用和next.ServeHTTP标志很干净地做到这一点:

s

如果您在let str = `Edit the ==Expression= == & T==sa==ext to see matches.` let tags = str.replace(/==(.*?)==/gs, '<span class="highlight">$1</span>') console.log(tags)标志仍然无法使用的环境中工作,则还可以使用s来匹配包含换行符的文本:

[\s\S]

答案 1 :(得分:1)

您在这里!这是使用超级秘密正则表达式替换功能技术的解决方案。

var testString = "Edit the ==Expression=\n== & T==sa==ext to see matches.";
console.log(testString);
console.log(testString.replace(/={2}([^=]=?)*={2}/g, function(match){
    return match.replace("==","<span class=\"highlight\">").replace("==","</span>");
}));

答案 2 :(得分:0)

您还可以使用以下正则表达式:

={2}(.*?)(?<!==)={2}

使用对\1的后向引用,并用<span class="highlight"></span>括起来。 (但是Mark Meyer解决方案更直接,更好,因为Lookbehinds仅在支持ECMA2018标准的浏览器中可用)

演示: https://regex101.com/r/UaFVeh/1/

答案 3 :(得分:0)

这是我问题的完整解决方案:将==环绕的文本替换为<span class="highlight"> </span>

<!DOCTYPE html>
<html lang="en">
<style>
  .highlight {
    background-color: yellow
  }
</style>

<body>
  <p>
    == asddac == awdawd = awda ==wad == ==d==
  </p>
</body>
<script>
  document.body.innerHTML = document.body.innerHTML.replace(/==([\s\S]*?)==/g, "<span class=\"highlight\">$1</span>");
</script>

</html>

答案 4 :(得分:-1)

这使用了懒惰的量词和反向引用。

==(.*?)== Regex101 demo