我一直在尝试制作一个“格式化”功能来转义所有格式化字符(*,`,_,|,〜),而我实际上已经创建了该功能,但是我想检查用户是否已经转义了它以防止格式化发生事故。
我当前的功能:
function deformat(string) {
return string.replace(/([*_~|`])/g, '\\$1');
}
我希望能够对其进行改进,以使像
"\*hey\*"
这样的字符串不会变成"\\*hey\\*"
,这会使它变为斜体。 (请注意,为便于阅读,前两个字符串中的斜杠不会转义) 最佳答案
尝试这个:
function deformat(string) {
return string.replace(/(?<!\\)([*_~|`])/g, '\\$1');
}
console.log(deformat('*hey*'));
console.log(deformat('\*hey\*'));
编辑:
由于上述方法无效,请尝试以下操作:
function deformat(string) {
return string.replace(/(^|[^\\])([*_~|`])/g, '$1\\$2');
}
console.log(deformat('*hey*'));
console.log(deformat('\*hey\*'));
它使用
(^|[^\\])
匹配字符串的开头或任何非'\'的内容,而不是后面的否定式。