Non so cosa sto facendo di sbagliato. Ho questa stringa che voglio sostituire
<?xml version="1.0" encoding="utf-8" ?>
<Sections>
<Section>
Sto usando regex per sostituire tutto compreso <Section>
e lascia il resto intatto.
arrayValues[index].replace("/[([.,n,s])*<Section>]/", "---");
Cosa c'è di sbagliato nel mio regex? Questo non significa riprogrammare ogni personaggio, incluse nuove linee e spazi, fino a includere <Section>
con ---
?
risposte:
2 per risposta № 1Prima di tutto, devi rimuovere le virgoletteintorno alla tua regex: se sono presenti, l'argomento non verrà elaborato come regex. JavaScript lo vedrà come una stringa (perché è una stringa) e cercherà di abbinarlo letteralmente.
Ora che ci pensiamo noi, possiamo semplificare un po 'la tua regex:
arrayValues[index].replace(/[sS]*?<Section>/, "---");
[sS]
aggira la mancanza di JavaScript di an s
flag (un'opzione utile supportata dalla maggior parte delle lingue che consente .
abbinare le nuove linee). s
fa abbinare newline (anche senza un s
flag specificato), quindi la classe di caratteri [sS]
dice al motore regex di abbinare:
s
- un carattere di spazi bianchi, che potrebbe essere una nuova riga
O
S
- a noncarattere bianco
Quindi puoi pensare [sS]
come abbinamento .
(qualsiasi personaggio tranne una nuova riga) o il letterale n
(una nuova riga). Vedere Il flag multilinea regex Javascript non funziona per più.
?
è usato per fare l'iniziale [sS]*
corrisponde a non avido, quindi il motore regex si fermerà quando colpisce la prima occorrenza di <Section>
.
0 per risposta № 2
arrayValues[index].replace("/[([.,n,s])*<Section>]/", "---");
Cosa c'è di sbagliato con la mia espressione regolare?
Non è una regex, è una stringa letterale. Una stringa verrebbe convertita in regex, ma la tua includerebbe quindi le barre. Usare un regex letterale anziché:
arrayValues[index].replace(/[Ss]*<Section>/, "---");
Inoltre, ci sono troppi personaggi non necessari. Il []
intorno a tutto costruisci una classe di personaggi, che non è quello che vuoi. Il gruppo di cattura ()
avvolge solo una classe di caratteri che può essere ripetuta da sola. E un punto .
all'interno di una classe di caratteri corrisponde un punto letterale, anziché tutti i personaggi.