我正在尝试在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.
我要问的是
={2}[^=]*={2}
,但那是不对的。非常感谢!
答案 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标准的浏览器中可用)
答案 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