Non riesci a sfuggire alla barra inversa con regex?

Sto usando la regex seguente

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$ 

So che è brutto, ma finora ha il suo scopo diverso dal fatto che il backslash non è permesso, perché penso che dovrebbe essere perché è sfuggito, ho anche provato \\ invece di \\\ ma gli stessi risultati. Qualche idea?

Se lo stai mettendo in una stringa all’interno di un programma, potresti dover effettivamente usare quattro barre rovesciate (perché il parser delle stringhe ne rimuoverà due quando “deescasterà” per la stringa , e quindi l’espressione regolare ne richiederà due per un escape backge rovesciata regex).

Per esempio:

 regex("\\\\") 

è interpretato come …

 regex("\\" [escaped backslash] followed by "\\" [escaped backslash]) 

è interpretato come …

 regex(\\) 

è interpretato come un’espressione regolare che corrisponde a un singolo backslash.


A seconda della lingua, potresti essere in grado di utilizzare una forma diversa di citazione che non analizza le sequenze di escape per evitare di doverne utilizzare tante – ad esempio, in Python:

 re.compile(r'\\') 

La r di fronte alle virgolette lo rende una stringa grezza che non analizza i backslash escape.

Se non è un valore letterale, devi usare \\\\ modo da ottenere \\ che significa una barra rovesciata di escape.

Questo perché ci sono due rappresentazioni. Nella rappresentazione stringa della tua espressione regolare, hai "\\\\" , che è ciò che viene inviato al parser. Il parser vedrà \\ che interpreta come un backslash con escape di escape valido (che corrisponde a una barra rovesciata).

Il backslash \ è il carattere di escape per le espressioni regolari. Quindi una doppia barra rovesciata significherebbe effettivamente un singolo, letterale backslash.

\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

ref: http://www.regular-expressions.info/reference.html

Da http://www.regular-expressions.info/charclass.html :

Si noti che gli unici caratteri speciali o metacaratteri all’interno di una class di caratteri sono la parentesi di chiusura (]), la barra rovesciata (\\), il segno di omissione (^) e il trattino (-). I soliti metacaratteri sono caratteri normali all’interno di una class di caratteri e non devono essere sfuggiti da una barra rovesciata. Per cercare una stella o più, usa [+ *]. L’espressione regolare funzionerà correttamente se si sfuggono i metacaratteri regolari all’interno di una class di caratteri, ma ciò riduce significativamente la leggibilità.

Per includere una barra rovesciata come un personaggio senza alcun significato speciale all’interno di una class di caratteri, devi sfuggire ad essa con un altro backslash. [\\ x] corrisponde a una barra rovesciata o a una x. La parentesi di chiusura (]), il segno di omissione (^) e il trattino (-) possono essere inclusi facendoli sfuggire con una barra rovesciata o posizionandoli in una posizione in cui non assumono il loro significato speciale. Raccomando il secondo metodo, dal momento che migliora la leggibilità. Per includere un cursore, posizionarlo ovunque tranne subito dopo la parentesi di apertura. [x ^] corrisponde a una x o a un segno di omissione. È ansible posizionare la staffa di chiusura subito dopo la staffa di apertura o il cursore di chiusura. [] x] corrisponde a una parentesi di chiusura oa una x. [^] x] corrisponde a qualsiasi carattere che non sia una parentesi chiusa o una x. Il trattino può essere incluso subito dopo la parentesi di apertura o subito prima della parentesi di chiusura o subito dopo il cursore di negazione. Sia [-x] che [x-] corrispondono a una x o a un trattino.

In che lingua stai scrivendo la regex?

Questa soluzione ha risolto il mio problema sostituendo il tag br in “\ n”.

 alert(content.replace(//g,'\n'));