Odpowiedź od DigitalRoss nie rozpozna akronimów osadzone w CamelCase. Na przykład podzieli "MyHTMLTricks" na "My H T M L Tricks" zamiast "My HTML Tricks".
Oto kolejna opcja na podstawie funkcji AsSpaced()
w PmWiki, który ma wielkie zadanie bycia wrażliwe przypadkach tak:
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2')
=> "My HTML Tricks"
Inną rzeczą lubię tego podejścia jest to, że pozostawia ciąg ciąg, zamiast przekształcania go w tablicę. Jeśli naprawdę chcesz tablicę, po prostu dodaj podział na końcu.
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2') \
.split
=> ["My", "HTML", "Tricks"]
Dla przypomnienia, oto jest oryginalny kod PHP z pmwiki.
function AsSpaced($text) {
$text = preg_replace("/([[:lower:]\\d])([[:upper:]])/", '$1 $2', $text);
$text = preg_replace('/([^-\\d])(\\d[-\\d]*(|$))/', '$1 $2', $text);
return preg_replace("/([[:upper:]])([[:upper:]][[:lower:]\\d])/", '$1 $2', $text);
}
Co byś zrobił z "ThisIsANarrowImageOfHIV?" Czy łączysz się z n, czyli rozdzielasz wirusa HIV? –