/ / All'ultimo tag (già in una stringa) RegEx - javascript, xml, regex

All'ultimo tag (già in una stringa) RegEx - javascript, xml, regex

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 № 1

Prima 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.