La risposta da DigitalRoss non riconoscerà acronimi incorporati nel CamelCase. Ad esempio, dividerà "MyHTMLTricks" in "My H T M L Tricks" anziché "My HTML Tricks".
Ecco un'altra opzione in base alla funzione AsSpaced()
in PmWiki, che fa un grande lavoro di essere sensibili a casi come questo:
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2')
=> "My HTML Tricks"
L'altra cosa che mi piace di questo approccio è che lascia la stringa una stringa, invece di trasformarla in un array. Se vuoi veramente la matrice, quindi aggiungi una divisione alla fine.
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*(|$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2') \
.split
=> ["My", "HTML", "Tricks"]
Per la cronaca, ecco il codice PHP originale da 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);
}
Cosa vorresti fare con 'ThisIsANarrowImageOfHIV?' Fare un join con n o dividere l'HIV? –