Javascript 转义降价的不一致子集

Javascript 转义降价的不一致子集,javascript,regex,markdown,Javascript,Regex,Markdown,我试图避开Discord支持的降价子集(*,,`,~)。 已转义的字符不应添加额外的反斜杠。 这就是我所拥有的: 函数转义标记(文本){ 返回文本。替换(/([^\\]\^^\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\; } log(转义标记('*test*\u string\uuz~请~`ignore`*\u`~ kthx\*\\\

我试图避开Discord支持的降价子集(
*
`
~
)。 已转义的字符不应添加额外的反斜杠。 这就是我所拥有的:

函数转义标记(文本){
返回文本。替换(/([^\\]\^^\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
}

log(转义标记('*test*\u string\uuz~请~`ignore`*\u`~ kthx\*\\\\~')我建议取消任何已转义字符的转义,然后再次转义所有字符:

函数转义标记(文本){
var unescaped=text.replace(/\\(\*\\\\\\\\\\\\\\\\\\\\\\\\~\\\\\\\)/g,$1');//取消对任何“反斜杠”字符的scape
var escaped=unescaped.replace(/(\*\\\\\\\\\\\~\\\\)/g,\\$1');//escape*\
返回逃逸;
}
var str='*test*\u string\uo~请~`ignore`*\u`~ kthx\*\\\\C:\\path\\to\\file';
控制台日志(“原始:”);
console.log(str);
日志(“转义:”);

console.log(逃逸标记(str))我知道这是用ruby编写的,不是js,但这可以简单地翻译成js,它可以避开所有已知的不协调特殊字符(+防止带有链接的预览)

def转义(str)
# \ -> \\
str=str.gsub(“\\”{“\\\\”}
# - -> \_
str=str.gsub('''{'\\\\'}
# * -> \*
str=str.gsub('*'){\\*'}
# ~ -> \~
str=str.gsub('~'{\\~'}
# ` -> \`
str=str.gsub('`'){'\\`}
# | -> \|
str=str.gsub('\\'){'\\\\'}
#没有预览的URL
str=str.gsub(/https?:\/\/[\S]+/){url}
str
结束
(我在这里发布这篇文章,因为我相信它可以帮助未来的读者,而且这里似乎是唯一讨论这个问题的地方)

下面是一个字符串,其中包含不一致的格式设置,作为奖励:

Italics *italics* or _italics_
Underline italics __*underline italics*__
Bold **bold**
Underline bold __**underline bold**__
Bold Italic ***bold italics***
underline bold italics __***underline bold italics***__
Underline __underline__
Strikethrough  ~~Strikethrough~~
Link https://google.com https://mathiasbynens.be/demo/url-regex
Code: `inline`

```
block
```

```ruby
block with language
```

Spoiler: ||spoiler||

最近我不得不为我的nodejsdiscord机器人做一个降价转义函数,下面是我使用的代码。
var markdownsecase=函数(文本){
返回文本。替换(/(\\\*\\\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
};

console.log(markdownsecase(“| | |一些扰流板文本| |”)
如果一个字符前面已经有一个反斜杠,这并不一定意味着它被转义了,例如,
\\~
@qxz,你完全正确。这实际上非常接近我自己和目前使用的结果,但它并非没有副作用。它确实解决了标记字符上现有的双转义无法转义的问题,但它也完全消除了字符串中现有的反斜杠。如果字符串应该包含一个带\\的原始反斜杠(如Windows路径),那么它将完全从结果中消失。编辑第一个正则表达式以仅对5个特殊字符进行取消扫描。我将此翻译为PHP:
preg\u replace(“/(\\\\*\\~\\\\\\\\\\\\\\\\\\\\\\\\\\”{2}/,“\\\\\\\$1',$txt)请注意,这不适用于斜体,因为只需要一个星号。