JavaScript从字符串中删除零宽空格(unicode 8203)

9 浏览
0 Comments

JavaScript从字符串中删除零宽空格(unicode 8203)

我正在编写一些处理网站内容的Javascript代码。然而,我发现SharePoint文本编辑器在用户按下退格键时会在文本中插入“零宽空格”字符,这给我的工作带来了困扰。

该字符的Unicode值为8203,或者用十六进制表示为B200。我尝试使用默认的“替换”函数来将其删除,但是尝试了很多变体,都没有成功:

var a = "o​m"; //这个不可见字符位于o和m之间
var b = a.replace(/\u8203/g,'');
= a.replace(/\uB200/g,'');
= a.replace("\\uB200",'');

等等。我在这个主题上尝试了很多变化,但是这些表达式都不起作用(在Chrome和Firefox中测试过)。唯一起作用的方法就是在表达式中键入实际的字符:

var b = a.replace("​",''); //相信我,它在那里

这可能会导致问题。因为这个字符是不可见的,所以这行代码本身就没有意义。我可以通过注释来解决这个问题。但是,如果代码被重用,并且文件使用非Unicode编码保存(或者在部署到SharePoint时,无法保证它不会破坏编码),这段代码将无法正常工作。有没有办法使用Unicode表示法而不是字符本身来编写这段代码呢?

[我对这个字符的胡言乱语]

如果你还没有遇到过这个字符(你可能确实没有遇到过,因为它对于肉眼来说是不可见的,除非它破坏了你的代码,你在尝试查找错误时才发现它),它是个真正的混蛋,会导致某些类型的模式匹配出现故障。我已经为你困住了这个家伙:

[​] <- 小心,别让它逃跑。

如果你想看到它,将这些方括号复制到文本编辑器中,然后用光标遍历它们。你会注意到,你需要三步才能通过看起来像两个字符的部分,并且你的光标会在中间跳过一步。

0