Ho un caso in cui sto cercando di sostituire un determinato modello con un altro. Il mio problema è che ho bisogno di sostituire solo l'ultima occorrenza di quel modello, non tutti. Ho trovato questa domanda:Utilizzo di espressioni regolari per sostituire solo l'ultima occorrenza di un motivo con JS
How to replace last occurrence of characters in a string using javascript
Ma non si adatta alle mie esigenze. Come sfondo, devo dire che sto cercando di sostituire una regola CSS, ma per l'esempio attuale consente di guardare a questo testo:
abcd:bka:
bbb:aad:
accx:aaa:
bbb:a0d:
cczc:aaa:
Diciamo che ho solo voglia di sostituire il valore di BBB. La mia regola attuale sarà
text.replace(/(\s*bbb:)([^:]+)/,"$1aaa")
ma sostituirà solo la prima partita, mentre voglio che sostituisca l'ultima. Il mio schema attuale è in realtà più complesso di questo, ma penso che lo pseudo problema sarà sufficiente.
Mi piace questa risposta: http://stackoverflow.com/questions/843049/how-to-replace-last-occurence-of-a-word-in-javascript Prefazione con (. *) Per mangiare tanto il più possibile prima della corrispondenza. –
@PeterEhrlich: dovresti usare '[\ s \ S] *' invece (il punto non corrisponde a newline), e generalmente preferisco essere esplicito nell'usare espressioni regolari non specifiche come '. *', Ma sì, che funzionerebbe anche Se le sue prestazioni saranno migliori o peggiori delle mie dipenderà dal testo reale su cui questo viene usato. Sospetto che sarà peggio nei testi di grandi dimensioni a causa di tutto il backtracking che provoca '. *' –