2012-12-07 10 views
5

Poszukuję najszybszego sposobu na zapisanie wszystkich liter, które nie są częścią AND w wyrażeniu. Chcę zostawić AND w oryginalnym przypadku, czy to and czy AND nie powinno się zmienić.Zmniejszenie wszystkich słów z wyjątkiem ORAZ

Na przykład test barack AND obama powinien być równy Barack AND Obama, ale nie barack and obama. (Zauważyć różnicę przypadek w a)

Oto jedno podejście, ale zastanawiam się, czy jest krótsza droga czy raczej sposób, że unika iteratorów:

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(' '); 

Odpowiedz

8

Można małe litery każdego słowa, które nie do końca I za pomocą ujemnego uprzedzenia:

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

Dobre podejście! Interesują mnie też inni, zanim wybiorę najlepsze. –

+0

Nie wiedziałem, że 'String.replace' zaakceptował funkcję, miło. –

+0

Widziałem, jak kiedyś robił pseudo-look-behinds. Jest to prawdopodobnie najbardziej eleganckie podejście do mojego problemu. –

2

Myślę, że pimvdb ma najbardziej eleganckie rozwiązanie, ale tylko dla odmiany, tutaj jest jeszcze jeden.

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(" "); 

To nie jest tak elegancki, ale uważam, że nieco bardziej czytelny dla człowieka i łatwiejsze do modyfikacji w razie potrzeby w przyszłości, czyli dodać do listy słów, które nie powinny być małe litery.

+0

Nie "podzieliłeś się" na nic tam, i myślę, że zamierzałeś zrobić 'split ('')'? –

+0

Tak, przepraszam, to był literówka z mojej strony. :) – Scott

Powiązane problemy