AS3 Regex, recuperando come un valore o un gruppo
-
21-12-2019 - |
Domanda
La scorsa notte ho deciso di imparare Regex per creare un "test" Parser di script e ho eseguito con successo in termini di variabili :)
Questo è l'AS3 Regexp che uso per analizzare le variabili (non sono sicuro se questo può essere semplificato, ma questo è ciò che è entrato nella mia mente):
/\s*>(\w+)\s*=\s*(?:(?:"(.*?)")|>(\w+))\s*/gsm
.
Le variabili analizzate prendono questo formato (esempio 1):
>ReferenceTestVariable = "Hello World"
.
o .. (Esempio 2):
>TestVariable2 = >ReferenceTestVariable
.
Il problema è con i raggruppamenti e non so come procedere correttamente, ma questa è la mia uscita Regexp per esempio 1 come array
[1]=ReferenceTestVariable, [2]=Hello World, [3]=
.
E questo è l'uscita per esempio 2:
[1]=TestVariable2, [2]=, [3]=ReferenceTestVariable
.
Come modificherei l'operatore del gruppo dopo che il =
per renderlo in modo che l'indice [2] e [3] venisse unito a vedere come indice 2 e 3 sono i valori dei negozi delle variabili?Anche come vorrei modificare il regexp per consentire a qualcosa del genere:
>Test = "String", >Referencevariable, "Another String", "More strings", >Variable2
. Soluzione
Penso che questo dovrebbe farlo:
/\s*>(\w+)\s*=\s*(".*?"|>\w+)/gsm
.
index[2]
avrà citazioni attorno a esso nel caso 1 o iniziare con >
nella causa 2.
Per fare il secondo, sarebbe:
/\s*>(\w+)\s*=\s*((?:(?:".*?"|>\w+)\s*,\s*)*(?:".*?"|>\w+))/gsm
.
Tuttavia, quando lo fai, tutti i valori separati da virgola si trovano insieme in index[1]
.I motori di espressione regolari non generalmente forniscono un modo per ottenere ciascuno dei valori corrispondenti da un *
o +
separatamente.