2016-02-04 12 views
5

Attualmente sto cercando di trovare le parentesi di apertura in una stringa usando regex in Elm 0.16 e sostituisco ognuna di esse con una parentesi seguita da uno spazio. Ho anche intenzione di sostituire ciascuna delle parentesi di chiusura nella stringa con uno spazio seguito da una parentesi di chiusura. Questo è così posso quindi sostituire gli spazi con una virgola per separare la stringa. La stringa che sto cercando di usare l'espressione regolare su è qui:Trovare e sostituire le parentesi in una stringa in Elm 0.16

((dati "citato dati" 123 4.5) (dati (@ # (4,5) "(più" "dati)"))!)

Ho già usato espressioni regolari per rimuovere le barre rovesciate utilizzate per evitare le virgolette. Per questo ho usato questa funzione:

getRidOfBackslashes : String -> String 
getRidOfBackslashes sExpression = 
    sExpression 
     |> Regex.replace Regex.All (Regex.regex "\\g") (\_ -> "") 

Poi ho cercato di utilizzare la seguente funzione per raggiungere l'obiettivo indicato in precedenza per quanto riguarda le parentesi di apertura:

createSpacesParentheses sExpression = 
    sExpression 
     |> (\_ -> getRidOfBackslashes sExpression) 
     |> Regex.replace Regex.All (Regex.regex "\(") (\_ -> "(") 

Guardando diversi javascript dama regex mio molto semplice regex sembra fare quello che voglio ancora il compilatore Elm mi dà l'errore:

(line 1, column 3): unexpected "(" expecting space, "&" or escape code 

27│  |> Regex.replace Regex.All (Regex.regex "\(") (\_ -> "(") 
                ^
Maybe <http://elm-lang.org/docs/syntax> can help you figure it out. 

mi chiedo se sto andando su questo nel modo giusto e se qualcuno potrebbe offrire assistenza. Grazie in anticipo.

+0

Se c'è un problema con l'escaping, usa una classe di caratteri: '[(]'. Ma sembra che puoi anche fare doppio escape di '(': '\\ (' –

+0

Grazie mille che ha funzionato perfettamente. –

risposta

4

Vedi this reference:

Be careful to escape backslashes properly! For example, "\w" is escaping the letter w which is probably not what you want. You probably want "\\w" instead, which escapes the backslash.

Quindi, il modo più semplice è quello di utilizzare solo una classe di caratteri [(] (come all'interno di una classe di caratteri, i caratteri tutti "speciali", ma \, ], ^ e - perdono la loro significato speciale) o è possibile utilizzare \\(.

Problemi correlati