2013-03-12 12 views
8

Prowadzę moje pytanie od add a space between two words.Umieszczanie spacji w łańcuchu wielbłądów za pomocą wyrażenia regularnego

Warunek: Rozłóż łańcuch wielbłąda i wpisz spacje tuż przed wielką literą, po której następuje litera małej litery lub może być niczym. Przestrzeń nie powinna nakładać się między wielkimi literami.

np CSVFilesAreCoolButTXT jest ciągiem Chcę wydajność to w ten sposób CSV Files Are Cool But TXT

pojechałem regularnej wyrazić w ten sposób:

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

Jeśli masz więcej niż 2 słowa, to musisz użyć flagi g, aby dopasować je wszystkie.

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

Jeśli próbują rozdzielić słowa jak CSVFile wtedy może trzeba użyć tego wyrażenia regularnego zamiast:

"CSVFilesAreCool".replace(/([a-zA-Z])([A-Z])([a-z])/g, '$1 $2$3') 

Ale nadal nie służy drogę Włożyłem moje wymagania.

+0

Twoje ostatnie wyrażenie regularne kończy się niepowodzeniem, gdy kończy się wielkimi literami. Na przykład. '... ButTXT' –

Odpowiedz

13
var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g; 

"CSVFilesAreCoolButTXT".replace(rex, '$1$4 $2$3$5'); 
// "CSV Files Are Cool But TXT" 

A także

"CSVFilesAreCoolButTXTRules".replace(rex, '$1$4 $2$3$5');  
// "CSV Files Are Cool But TXT Rules" 

Tekst napisu, który pasuje do wzorca regex zostaną zastąpione przez ciąg zastępczej '$1$4 $2$3$5', gdzie $1, $2 itd. Odnoszą się do podciągi dopasowane przez grupy przechwytywania wzorów ().

$1 odnosi się do fragmentu dopasowane pierwszego ([A-Z]) sub-wzorca i $3 odnosi się do fragmentu dopasowane pierwszego sub-([a-z]) wzór itp

względu na charakter naprzemiennej |, aby dopasować się regex będzie musiał dopasować pod-wzór ([A-Z])([A-Z])([a-z]) lub pod-wzór ([a-z])([A-Z]), więc jeśli zostanie dopasowany kilka grup przechwytywania pozostanie niedopasowanych. Te grupy przechwytywania mogą być przywoływane w łańcuchu zamiennym, ale nie mają na nie wpływu - efektywnie odwołają się do pustego łańcucha.

Przestrzeń w ciągu zastępczym zapewnia wstawienie spacji do ciągu znaków za każdym razem, gdy jest wykonywany (końcowa flaga g oznacza, że ​​silnik wyrażeń regularnych będzie szukał więcej niż jednego dopasowania).

+2

Chciałbym zobaczyć wyjaśnienie regex, które zdefiniowałeś, więc czytelnicy i początkujący będą wiedzieć, co dokładnie dzieje się z tymi wszystkimi 1-2-3-4-5. – KMX

+0

Okay działa najlepiej dla tego, co napisałem w moim pierwotnym wymaganiu. Teraz przedstawiam kolejne streszczenia. Więc pozwólmy na to pod tym wątkiem. Przeczytaj aktualizacje. – KMX

+1

@KMX. Polecam zadać nowe pytanie, aby umożliwić komuś innemu uzyskanie kredytu za zaakceptowaną odpowiedź. – MikeM

Powiązane problemy