Ho una funzione in grassetto prima del colon.Come migliorare (eliminare troppi token?) Regexp lento in JavaScript?
//Fast regex (time: 0)
var colonRegex = /^[^*:\n]+:/gm;
e
//Slow regex (time: 139) Limit by 10 words
//var colonRegex = /^([^*:\n ]+ ?){1,10}:/gm;
// I have issue with it when I want to apply replace to tens of divs (it freezes chrome)
var bolded = str.replace(colonRegex, function(match) {
return "<b>"+match+"</b>";
});
è possibile testare su jsfiddle: http://jsfiddle.net/damg7zuk/4/
dove faccio un errore? Posso limitare le parole all'interno del callback. Si può fare meglio nella regex stessa? Grazie per il tuo trucco.
per me entrambi sono super veloce utilizzando LMDE e Firefox –
perché stai usando una richiamata? Non puoi usare '.replace (colonRegex," $ 1 ");'? (Se aggiungi alcune parentesi alla regex: '/^([^ *: \ n] +:)/gm'.) Se aggiungo la regex lenta al tuo violino funziona in" Time: 34 "e non bloccare Chrome. – nnnnnn
Il problema è che si ottiene un backtrack catastrofico. Quando hai una riga con più di dieci parole prima dei due punti, il modello corrisponderà per prima alle dieci parole. Poi scopre che i due punti alla fine non coincidono, quindi inizia a retrocedere di un personaggio alla volta e rivalutare il modello su un over finché non arriva a una singola parola dove può determinare che il pattern non corrisponde affatto su quella linea. – Guffa