Eu tenho tentado obter um comando regex JavaScript para transformar algo como "thisString"
em "This String"
, mas o mais próximo que eu comecei está substituindo uma carta, resultando em algo como "Thi String"
ou "This tring"
. Alguma ideia?
Para esclarecer eu posso lidar com a simplicidade de capitalizar uma carta, eu não sou tão forte com RegEx, e dividir "somethingLikeThis"
em "something Like This"
é onde eu estou tendo problemas.
javascript
regex
Um assistente fez isso
fonte
fonte
Respostas:
exibe
Mostrar snippet de código
fonte
str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() );
Ele se converteráuserID
emUser ID
, e até se converteráuserIDField
em #User ID Field
Eu tinha um interesse inativo nisso, particularmente no manuseio de seqüências de capitais, como no xmlHTTPRequest. As funções listadas produziriam "Xml HTTP Request" ou "Xml HTTPRequest", a minha produz "Xml HTTP Request".
Há também uma versão String.prototype em uma essência .
fonte
str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() )
Isso pode ser feito de forma concisa com o regex lookahead ( demonstração ao vivo ):
(Eu pensei que a
g
bandeira (global) era necessária, mas por incrível que pareça, não é nesse caso em particular.)O uso de lookahead with
split
garante que a letra maiúscula correspondente não seja consumida e evita lidar com um espaço à esquerda se UpperCamelCase for algo com o qual você precisa lidar. Para colocar em maiúscula a primeira letra de cada uma, você pode usar:O
map
método array é um recurso do ES5, mas você ainda pode usá-lo em navegadores mais antigos com algum código do MDC . Como alternativa, você pode iterar sobre os elementos da matriz usando umfor
loop.fonte
Eu acho que isso deve ser capaz de lidar com caracteres maiúsculos consecutivos, bem como camelCase simples.
Por exemplo: someVariable => someVariable, mas ABCCode! = Código ABC.
O regex abaixo funciona no seu exemplo, mas também no exemplo comum de representação de abreviações no camcelCase.
Você também pode ajustar como acima para colocar em maiúscula o primeiro caractere.
fonte
spacecamel ('somethingLikeThis')
// valor retornado: algo como isto
fonte
A Lodash lida bem com isso
_.startCase()
fonte
Uma solução que também lida com números:
Testado aqui [JSFiddle, nenhuma biblioteca. Não tentei IE]; deve ser bem estável.
fonte
Se você não se importa com navegadores antigos (ou não se importa em usar uma função de redução de fallback para eles), isso pode dividir seqüências pares como 'xmlHTTPRequest' (mas certamente os gostos de 'XMLHTTPRequest' não podem).
fonte
Minha versão
fonte
Experimente esta solução aqui -
fonte
Não é regex, mas é útil conhecer técnicas simples e antigas como esta:
fonte