转义markdown的Discord子集
问题描述:
我试图逃避Discord支持的降价子集(*
,_
,`
,~
)。 已经转义的字符不应该添加额外的反斜杠。 这是我有:转义markdown的Discord子集
function escapeMarkdown(text) {
\t return text.replace(/([^\\]|^|\*|_|`|~)(\*|_|`|~)/g, '$1\\$2');
}
console.log(escapeMarkdown('*test* _string_ ~please~ `ignore` *_`~kthx \* \\~'));
这工作得很好,减去事实,即对对方多次降价字符不会全部逃脱。我不确定如何扩大这个范围,以免让表达过于复杂。
答
我会建议进行反向转义任何已经转义字符,然后再逃避一切:
function escapeMarkdown(text) {
var unescaped = text.replace(/\\(\*|_|`|~|\\)/g, '$1'); // unescape any "backslashed" character
var escaped = unescaped.replace(/(\*|_|`|~|\\)/g, '\\$1'); // escape *, _, `, ~, \
return escaped;
}
var str = '*test* _string_ ~please~ `ignore` *_`~kthx \* \\~ C:\\path\\to\\file';
console.log("Original:");
console.log(str);
console.log("Escaped:");
console.log(escapeMarkdown(str));
如果角色已经在它前面的一个反斜杠,这并不一定意味着它是逃脱,例如'\\〜' – qxz
@qxz你完全正确。 – Gawdl3y