Infelizmente, apesar de ter tentado aprender regex pelo menos uma vez por ano durante tantos anos quanto consigo me lembrar, sempre me esqueço de usá-los com pouca frequência. Este ano, minha resolução de ano novo é não tentar aprender regex novamente - então, este ano, para me salvar das lágrimas, vou entregá-lo ao Stack Overflow . (Último remix de Natal).
Quero passar uma string neste formato {getThis}
e retornar a string getThis
. Alguém poderia me ajudar a cumprir minha resolução de ano novo?
Perguntas relacionadas no Stack Overflow:
javascript
regex
ChrisInCambo
fonte
fonte
Respostas:
Se sua string será sempre nesse formato, uma regex é um exagero:
substring(1
significa iniciar um caractere (logo após o primeiro{
) e,g.length-1)
significa levar caracteres até (mas não incluindo) o caractere no comprimento da string menos um. Isso funciona porque a posição é baseada em zero, ou seja,g.length-1
é a última posição.Para leitores que não sejam o autor da postagem original: Se tiver que ser uma regex, use
/{([^}]*)}/
se quiser permitir strings vazias ou/{([^}]+)}/
se quiser corresponder apenas quando houver pelo menos um caractere entre as chaves. Demolir:/
: inicia o padrão regex{
: uma chave literal(
: começar a capturar[
: comece a definir uma classe de personagens para capturar^}
: "qualquer coisa diferente de}
"]
: OK, essa é toda a nossa definição de classe*
: qualquer número de caracteres correspondentes à classe que acabamos de definir)
: captura concluída}
: uma chave literal deve seguir imediatamente o que capturamos/
: termina o padrão regexfonte
Experimentar
Isso significa que combine qualquer caractere entre {e}, mas não seja ganancioso - combine a string mais curta que termina com} (o? Para * de ser ganancioso). Os parênteses permitem que você extraia a parte correspondente.
Outra forma seria
Corresponde a qualquer caractere, exceto a} char (outra maneira de não ser ganancioso)
fonte
g
no final torna a pesquisa global. Veja um exemplofonte
Experimente isto:
Por exemplo
vai voltar
gskinner.com
,ssd.sd
.fonte
\}
no primeiro bloco?}
, mesmo que não comece com{
.Aqui está uma solução simples usando substituição de javascript
Como a resposta aceita acima aponta, o problema original é facilmente resolvido com substring, mas usar substituir pode resolver os casos de uso mais complicados
Se você tem uma string como "randomstring999 [fieldname]", você usa um padrão ligeiramente diferente para obter fieldname
fonte
Este funciona no Textmate e corresponde a tudo em um arquivo CSS entre as chaves.
selector {. . matches here including white space. . .}
Se você quiser mais poder retornar o conteúdo, envolva-o em mais um conjunto de parênteses da seguinte forma:
e você pode acessar o conteúdo por meio de $ 1.
Isso também funciona para funções, mas não testei com chaves aninhadas.
fonte
Você deseja usar regex lookahead e lookbehind. Isso fornecerá apenas o que está dentro das chaves:
fonte
Tente isto
fonte
Regex para obter matrizes de string com chaves entre chaves ocorre na string, em vez de apenas encontrar a primeira ocorrência.
fonte
Procurei outras respostas e parece que falta uma lógica vital nelas. ou seja, selecione tudo entre dois colchetes CONSECUTIVOS, mas NÃO os colchetes
então, aqui está minha resposta
fonte
O mais simples,
.replace(/.*{(.*)}.*/, '$1')
infelizmente, retorna a string inteira se a regex não corresponder. O trecho de código acima pode detectar uma correspondência mais facilmente.fonte
Tente este, de acordo com http://www.regextester.com ele funciona para js normalmente.
([^{]*?)(?=\})
fonte
/([^{]*?)\w(?=\})/gmi
Você pode usar essa recursão regex para corresponder a tudo, até mesmo outro
{}
(como um texto JSON):fonte
Até mesmo isso me ajuda a tentar resolver o problema de alguém,
Por exemplo:
Resultado:
fonte