Malheureusement, malgré avoir essayé d'apprendre les regex au moins une fois par an pendant autant d'années que je me souvienne, j'oublie toujours car je les utilise si rarement. Cette année, ma résolution du nouvel an est de ne pas essayer d'apprendre à nouveau l'expression régulière - Donc cette année, pour me sauver des larmes, je la donnerai à Stack Overflow . (Dernier remix de Noël).
Je veux passer une chaîne dans ce format {getThis}
et recevoir la chaîne getThis
. Quelqu'un pourrait-il m'aider à m'en tenir à ma résolution du nouvel an?
Questions connexes sur Stack Overflow:
javascript
regex
ChrisInCambo
la source
la source
Réponses:
Si votre chaîne sera toujours de ce format, une expression régulière est excessive:
substring(1
signifie commencer un caractère dans (juste après le premier{
) et,g.length-1)
signifie prendre des caractères jusqu'à (mais non compris) le caractère à la longueur de la chaîne moins un. Cela fonctionne car la position est basée sur zéro, c'est-à-direg.length-1
la dernière position.Pour les lecteurs autres que l'affiche originale: s'il doit s'agir d'une expression régulière, utilisez cette option
/{([^}]*)}/
si vous souhaitez autoriser les chaînes vides, ou/{([^}]+)}/
si vous souhaitez effectuer une correspondance uniquement lorsqu'il y a au moins un caractère entre les accolades. Panne:/
: démarrer le modèle regex{
: une accolade littérale(
: commencer à capturer[
: commencez à définir une classe de caractères à capturer^}
: "autre chose que}
"]
: OK, c'est toute notre définition de classe*
: n'importe quel nombre de caractères correspondant à cette classe que nous venons de définir)
: capture terminée}
: une accolade littérale doit immédiatement suivre ce que nous avons capturé/
: terminer le modèle regexla source
Essayer
Cela signifie, correspond à n'importe quel caractère entre {et}, mais ne soyez pas gourmand - correspond à la chaîne la plus courte qui se termine par} (le? Arrête * d'être gourmand). Les parenthèses vous permettent d'extraire la partie correspondante.
Une autre façon serait
Cela correspond à n'importe quel caractère sauf un} char (une autre façon de ne pas être gourmand)
la source
g
à la fin en fait une recherche globale. Voir un exemple de travailla source
Essaye ça:
Par exemple
sera de retour
gskinner.com
,ssd.sd
.la source
\}
dans le premier bloc?}
, même s'il ne commence pas par{
.Voici une solution simple utilisant javascript replace
Comme le souligne la réponse acceptée ci-dessus, le problème d'origine est facilement résolu avec une sous-chaîne, mais l'utilisation de replace peut résoudre les cas d'utilisation les plus compliqués.
Si vous avez une chaîne comme "randomstring999 [fieldname]", vous utilisez un modèle légèrement différent pour obtenir fieldname
la source
Celui-ci fonctionne dans Textmate et correspond à tout ce qui se trouve dans un fichier CSS entre les accolades.
selector {. . matches here including white space. . .}
Si vous souhaitez pouvoir renvoyer davantage le contenu, placez-le dans un autre jeu de parenthèses comme ceci:
et vous pouvez accéder au contenu via $ 1.
Cela fonctionne également pour les fonctions, mais je ne l'ai pas testé avec des accolades imbriquées.
la source
Vous voulez utiliser lookahead et lookbehind regex. Cela ne vous donnera que ce qui se trouve à l'intérieur des accolades:
la source
Essaye ça
la source
L'expression régulière pour obtenir des tableaux de chaînes avec des accolades entourées se produit dans une chaîne, plutôt que de simplement rechercher la première occurrence.
la source
J'ai examiné les autres réponses et une logique vitale semble leur manquer. c'est-à-dire, sélectionnez tout entre deux crochets CONSÉCUTIFS, mais PAS les crochets
alors, voici ma réponse
la source
Le plus simple
.replace(/.*{(.*)}.*/, '$1')
renvoie malheureusement la chaîne entière si l'expression régulière ne correspond pas. L'extrait de code ci-dessus peut détecter plus facilement une correspondance.la source
Essayez celui-ci, selon http://www.regextester.com cela fonctionne normalement pour js .
([^{]*?)(?=\})
la source
/([^{]*?)\w(?=\})/gmi
Vous pouvez utiliser cette récursivité regex pour faire correspondre tout entre les deux, même un autre
{}
(comme un texte JSON):la source
Même cela m'aide en essayant de résoudre le problème de quelqu'un,
Par exemple:
Production:
la source