簡體   English   中英

JavaScript從字符串中刪除ZERO WIDTH SPACE(unicode 8203)

[英]JavaScript remove ZERO WIDTH SPACE (unicode 8203) from string

我正在寫一些處理網站內容的JavaScript。 當用戶按下退格鍵時,SharePoint文本編輯器傾向於在文本中放置“零寬度空格”字符,這使我的努力受挫。 字符的unicode值為8203,或十六進制的B200。 我試圖使用默認的“替換”功能來擺脫它。 我嘗試了許多變體,但沒有一個起作用:

var a = "o​m"; //the invisible character is between o and m

var b = a.replace(/\u8203/g,'');
= a.replace(/\uB200/g,'');
= a.replace("\\uB200",'');

等等等等。 我已經在這個主題上嘗試了很多變體。 這些表達式均無效(已在Chrome和Firefox中測試),唯一有效的方法是在表達式中鍵入實際字符:

var b = a.replace("​",''); //it's there, believe me

這帶來了潛在的問題。 該字符是不可見的,因此線條本身沒有意義。 我可以通過評論解決它。 但是,如果曾經重復使用代碼,並且使用非Unicode編碼保存了文件,(或者將其部署到SharePoint時,不能保證它不會弄亂編碼),它將停止工作。 有沒有辦法使用unicode標記而不是字符本身來編寫此代碼?

[我對角色的無聊]

如果您還沒有遇到這個角色,(並且您可能還沒有看到過,因為它肉眼看不見,除非它破壞了代碼並且您在嘗試查找錯誤時發現了它),這確實是一個漏洞會導致某些類型的圖案匹配發生故障。 我為你關上了野獸:

[-<-小心,不要讓它逃脫。

如果要查看它,請將這些括號復制到文本編輯器中,然后遍歷光標。 您會注意到您將需要三個步驟來傳遞看起來像2個字符的字符,並且光標將在中間跳過一個步驟。

unicode轉義中的數字應為十六進制,而8203的十六進制為200B(這實際上是Unicode零寬度空格 ),因此:

var b = a.replace(/\u200B/g,'');

現場示例

var a = "o​m"; //the invisible character is between o and m
var b = a.replace(/\u200B/g,'');
console.log("a.length = " + a.length);      // 3
console.log("a === 'om'? " + (a === 'om')); // false
console.log("b.length = " + b.length);      // 2
console.log("b === 'om'? " + (b === 'om')); // true

可接受的答案不適用於我的情況。

但這確實做到了:

text.replace(/(^[\s\u200b]*|[\s\u200b]*$)/g, '')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM