2013-07-03 43 views
32

[\b] corrisponde a un carattere di backspace apparentemente. Non riesco a capire come una stringa possa contenere un carattere backspace. Qualcuno può darmi un esempio concreto di come questo sarebbe usato? Grazie mille.A cosa serve l'espressione regolare [ b] backspace?

+0

Ovviamente una stringa può contenere un "carattere" di backspace - tra virgolette qui, perché _control code_ sarebbe più preciso. Ma fa parte di ASCII (e quindi anche di UTF-8), quindi ovviamente può succedere ovunque vengano utilizzate quelle codifiche. – CBroe

+2

L'ambiente in cui questa stringa è _used_ in lo farà - beh, questa è un'altra domanda. Inserito in HTML o allertato/registrato da JS molto probabilmente non avrà alcun effetto visibile - ma per esempio una stampante molto vecchia (ago) con cui questa stringa è stata mandata potrebbe ripristinare una posizione di carattere e stampare sopra il seguente carattere ... – CBroe

+0

Sì, ho già visto la tua risposta. Grazie per il chiarimento. – CBroe

risposta

31

mentre tutti gli altri hanno ragione in generale (che \b è un confine di parola), \bvuol significa classi di personaggi backspace interna:

[\b] 

Questo sarà davvero corrispondere a un backspace carattere. È solo un carattere di controllo ASCII che può apparire nel testo (codice ASCII 8 o 10 in ottale). Suppongo che sia usato principalmente per motivi legacy, per aggiungere segni diacritici (ad esempio potresti fare a, backspace, ´, per ottenere á). Oggi questi sono stati per lo più sostituiti da marchi Unicode.

Come una stringa contenente un backspace alla fine sarà look dipende dal software che lo esegue. Le console probabilmente spostano il cursore indietro e sovrascrivono quello che c'era se il backspace è seguito da altri nuovi caratteri. Per vedere questo, il fuoco su una console di scripting interattivo (come node.js se si vuole provare a JavaScript), ed eseguire

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

Si noti che, se aveste omesso def, si era appena ottiene abc, perché lo stesso backspace non cancella nulla. Sposta solo il cursore indietro.

D'altra parte, il browser potrebbe semplicemente ignorarlo in un campo di input. Ad esempio, dai un'occhiata a Unicode converter, inserisci l'input JavaScript abc\b\bdef nell'ingresso in basso a sinistra, premi "converti" e l'output "Caratteri" non avrà lo bc cancellato.

Il modo in cui lo \b è un backspace in classi di caratteri non è univoco per JavaScript, ma è interpretato in questo modo nella maggior parte delle espressioni di espressioni regolari.

Ulteriori approfondimenti:

+3

Vedere questa risposta per ulteriori dettagli: http://stackoverflow.com/a/6792867/758446 – BlackVegetable

+0

@BlackVegetable grazie, ho cercato qualcosa di simile, ma non sono riuscito a trovare rapidamente alcuna buona fonte –

+0

Ora una sfida successiva sarebbe quello di costruire un caso bizzarro (moderno) in cui in realtà dovresti * voler * catturare un personaggio del genere! – BlackVegetable

7

Nel contesto di un'espressione regolare (al di fuori di una classe di caratteri) \b non significa backspace; significa 'limite di parole'. There are lot's of uses for it. Ad esempio,

/\bword\b/ 

corrisponderà some word ma non someword.

Come m.butter fa notare che si può usarlo per abbinare un carattere backspace, se è posto all'interno di una classe di caratteri. Per esempio:

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

+1 Picchiami di 10 se spiegato meglio. – elclanrs

+4

questo non è il punto. '[\ b]' corrisponde a un backspace. –

+0

@ m.buettner: Sì, questo è l'unico caso. Un carattere backspace è '\ u0008'. – elclanrs

0

esempio reale: passiamo \ b tra i client (attraverso un server ospitato) utilizzando il nostro protocollo consentire agli utenti di backspace sul testo che hanno già inviato.In un tipo di client (questo è basato sul browser web ma gli altri non lo sono), controllo la presenza di un hit tasto backspace (e.which == 8 // Ref. https://api.jquery.com/keydown/) e invio '\ b'; gli altri client gestiscono questo (possibilmente automaticamente). Quando il mio client web riceve \ b, il mio codice deve gestirlo appropriatamente.