2013-07-03 131 views
32

[\b]顯然匹配退格字符。我無法理解字符串如何包含退格字符。 有人可以給我一個這將如何使用的具體例子嗎?非常感謝。[ b] backspace regex有什麼用?

+0

當然,一個字符串可以包含一個退格「字符」 - 在這裏用引號引起來,因爲_control code_會更加精確。但它是ASCII的一部分(因此也是UTF-8),所以當然它可以發生在使用這些編碼的地方。 – CBroe

+2

這個字符串在什麼環境中被使用將會導致它 - 這是另一個問題。放入HTML或從JS提醒/記錄它很可能根本沒有可見的效果 - 但例如一個真正舊的(針)打印機,該字符串被髮送到可以恢復一個字符位置,並打印下面的字符在其上... – CBroe

+0

是的,已經看到了你的答案。感謝您的澄清。 – CBroe

回答

31

當其他人是對的,一般(即\b是一個字的邊界),\b意味着退格內的字符類:

[\b] 

這的確會匹配退格字符。它只是一個可以出現在文本中的ASCII控制字符(ASCII碼8或10進制)。我想這主要是用於傳統的原因,添加變音標記(例如,你可以做a,退格,´,得到á)。今天,這些已經大部分被Unicode組合標記取代。

如何最終包含退格符的字符串取決於呈現它的軟件。如果退格之後是新的其他字符,控制檯可能仍然會將光標移回並覆蓋那裏的內容。看到這一點,火了一個交互式腳本控制檯(如Node.js的,如果你想嘗試在JavaScript),並運行

> console.log("abc\b\bdef") 
adef 

需要注意的是,有你省略def,你只是得到abc,因爲退格本身並沒有消除任何東西。它只將光標移回。

另一方面,您的瀏覽器可能會忽略它在輸入字段中。例如,檢查一個Unicode converter,在左下角輸入JavaScript輸入abc\b\bdef,點擊「轉換」,「字符」輸出將不會有bc刪除。

順便說一句\b是字符類中的退格並不是JavaScript所獨有的,但是在大多數正則表達式中都是這樣解釋的。

延伸閱讀:

+3

查看此答案的其他詳細信息:http://stackoverflow.com/a/6792867/758446 – BlackVegetable

+0

@BlackVegetable謝謝,我一直在尋找這樣的東西,但無法快速找到任何好消息 –

+0

現在,後續挑戰將構建一個奇怪的(現代)邊緣案例,你實際上*想*捕捉這樣一個角色! – BlackVegetable

7

在正則表達式的上下文中(在字符類之外)\b並不意味着退格;它意味着'文字邊界'。 There are lot's of uses for it。例如,

/\bword\b/ 

將匹配some word但不someword

由於m.butter指出你可以用它來搭配一個退格符,如果它是一個字符類內進行。例如:

var input = "this is a \btest."; 
/[\b]/.test(input); // true 
+0

+1擊敗我10秒,並更好地解釋。 – elclanrs

+4

這不是重點。 '[\ b]'匹配退格。 –

+0

@ m.buettner:是的,這是唯一的情況。退格字符是'\ u0008'。 – elclanrs

0

真實的例子:我們通過\ b客戶端之間(通過託管服務器)使用我們自己的協議允許用戶退回已發送的文本。在一種類型的客戶端(這個是基於web瀏覽器的,但其他的不是),我檢查backspace-key hit(e.which == 8 // Ref。https://api.jquery.com/keydown/)併發送'\ b';其他客戶端處理這個(可能自動)。當我的Web客戶端收到\ b時,我的代碼必須正確處理它。