2012-12-07 14 views
5

Sto cercando il modo più rapido per mettere in minuscolo tutte le lettere che non fanno parte di AND in una frase. Voglio lasciare AND nel suo caso originale, se fosse and o AND non dovrebbe cambiare.Tutte le parole minuscole tranne AND E

Ad esempio, barack AND obama deve verificare uguale a Barack AND Obama ma non a barack and obama. (Notare la differenza caso e)

Ecco un approccio, ma mi chiedo se c'è un modo più breve, o meglio un modo che evita iteratori:

var str = 'Barack AND Obama'; // should be barack AND obama after 
str = str.split(/\s+/g).map(function (s) { 
    return s.toLowerCase() != 'and' ? s.toLowerCase() : s; 
}).join(' '); 

risposta

8

È possibile minuscolo ogni parola che non è esattamente E utilizzando un lookahead negativo:

str = str.replace(/\b(?!AND).+?\b/g, function(s) { 
    return s.toLowerCase(); 
}); 
+0

Buon approccio! Mi interessano anche gli altri prima di scegliere il meglio –

+0

Non sapevo che 'String.replace' accettasse una funzione, bello. –

+0

Ho visto che faceva pseudo look-behinds. Questo è probabilmente l'approccio più elegante al mio problema. –

2

Penso che pimvdb abbia la soluzione più elegante, ma solo per varietà, eccone un'altra.

var str = 'Barack AND Obama'; 
var arr = str.split(' '); 
for(var i=0;i<arr.length;i++){ 
    if (arr[i] != 'AND'){ 
    arr[i] = arr[i].toLowerCase(); 
    } 
} 
var ans = arr.join(" "); 

Non è elegante, ma io lo trovo un po 'più leggibile e più facile da modificare, se necessario, in futuro, vale a dire aggiungere alla lista di parole che non devono essere in minuscolo.

+0

Non ci si "divide" su niente, e penso che si intendesse fare 'split ('')'? –

+0

sì, scusa, quello era un errore di battitura da parte mia. :) – Scott

Problemi correlati