我一直在尝试制作一个“格式化”功能来转义所有格式化字符(*,`,_,|,〜),而我实际上已经创建了该功能,但是我想检查用户是否已经转义了它以防止格式化发生事故。

我当前的功能:

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\*'));





它使用(^|[^\\])匹配字符串的开头或任何非'\'的内容,而不是后面的否定式。

09-18 18:32