2013-08-22 16 views
21

Mam wyrażeń regularnych w JavaScript, aby podzielić moją camel case ciąg na duże litery za pomocą następującego kodu (które następnie dostał od here):Regex podzielić camel sprawa

"MyCamelCaseString" 
    .replace(/([A-Z])/g, ' $1') 
    .replace(/^./, function(str){ return str.toUpperCase(); }) 

zatem, że zyski :

"My Camel Case String" 

Co jest dobre. Chciałbym jednak podnieść ten poziom. Czy ktoś mógłby mi pomóc z wyrażeniem regularnym, które zostanie podzielone, i tylko wtedy, gdy poprzedni znak jest pisany małymi literami, a drugi jest pisany dużymi literami.

Zatem w powyższym przykładzie będzie wynik spodziewam, ale jeśli to zrobię:

"ExampleID" 

Potem się wrócił:

"Example ID" 

Zamiast

"Example I D" 

Rejestracja Dzieli się na każdą wielką skrzynkę i ignoruje wszystko przed nią.

Mam nadzieję, że ma to sens! I dzięki :).

+0

http://www.regular-expressions.info/lookaround.html – Mchl

+7

'(zaawansowane) '- słodki. – devnull

+0

Rezultat powinien brzmieć "Mój ciąg znaków wielbłąda" ... – urzeit

Odpowiedz

36

Moje przypuszczenie jest zastąpienie /([A-Z])/ z /([a-z])([A-Z])/ i ' $1' z '$1 $2'

"MyCamelCaseString" 
    .replace(/([a-z])([A-Z])/g, ' $1 $2'); 

/([a-z0-9])([A-Z])/ numerów licząc jako małe litery

+0

Fantastyczne - dziękuję! – keldar

+1

@keldar Nie będzie to jednak działać dla liczb. 'Test1Test2' pozostanie taki sam. – Broxzier

+1

@broxzier dobry punkt, dodano przykład do tego. –

28
"MyCamelCaseString".replace(/([a-z](?=[A-Z]))/g, '$1 ') 

Wyjścia:

"My Camel Case String" 
-2

ten RegExp String jest

.replace("/([a-zA-Z][a-z]*)/g",...); 
12

Jeśli chcesz podzielić camel sprawa ciąg, może warto rozważyć to:

"myCamelCaseString".split(/(?=[A-Z])/).map(function(s) { 
    return s.toLowerCase(); 
}); 

można pominąć map część, ale będziesz skończyć z tablicą słów pisanych wielką literą. Mam nadzieję, że to ci pomoże i przepraszam za mój zły angielski.

Cheers

+0

Nie był świadomy wyrażeń regularnych działających w funkcji podziału. Użyłem połączenia po podzieleniu w moim przypadku. Super proste. – dezinezync

2

Cześć nie widziałem na żywo demo, dzięki @michiel-dral

var tests =[ "camelCase", 
 
      "simple", 
 
      "number1Case2"] 
 

 
function getCamelCaseArray(camel) { 
 
    var reg = /([a-z0-9])([A-Z])/g; 
 
    return camel.replace(reg, '$1 $2').split(' '); 
 
} 
 

 
function printTest(test) { 
 
document.write('<p>'+test + '=' + getCamelCaseArray(test)+'</p>'); 
 
} 
 

 
tests.forEach(printTest);
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script src="script.js"></script> 
 
    </head> 
 

 
    <body> 
 
    </body> 
 

 
</html>