2016-03-27 1 views
4

Je suis développeur frontend et travaillant avec IUEditor, ce qui peut rendre html/css/js à partir de la conception.'style = "border: none; débordement: caché; hauteur: 80px"' à objet js par python re.sub

Mais malheureusement, notre projet est fait de React, donc je dois compiler html en jsx. donc je l'ai fait moi-même, en utilisant python, sauf un à gauche.

je dois changer

style = "border: none; overflow: hidden; hauteur: 80px"

attribut à l'objet JSX, qui censé être

style = {{border: none, débordement: masqué, hauteur: 80px}}

Vous pouvez demander, pourquoi ne pas utiliser https://facebook.github.io/react/html-jsx.html, mais en fait IUEditor utilise un attribut à d'autres endroits, et jsx ne permet pas de les utiliser par défaut.

Quoi qu'il en soit, le problème est que je veux changer le style html tag en style objet de jsx par la méthode python re.sub. Comment puis-je faire ceci?! Demandez l'aide des maîtres regex;)

+0

Pourquoi a-t-il besoin d'être un objet? Le style devrait pouvoir s'appliquer comme une chaîne et toujours styliser l'élément. Avez-vous besoin d'accéder au style comme accessoire dans le composant enfant? –

+1

Si vous cherchez une solution regex, vous devriez probablement ajouter la balise ['regex'] (http://stackoverflow.com/questions/tagged/regex). – JRodDynamite

+0

@Rahat Ahmed https://facebook.github.io/react/tips/inline-styles.html dit que la balise de style doit être un objet ... ai-je raison? – user6119787

Répondre

1

Peut-être que c'est plus simple avec la méthode re.search. Vous obtenez les résultats et construisez le JSX. Je ne suis pas parfait à Phyton mais JS cela pourrait facilement être accompli par

var str = 'style="border:none; overflow:hidden; height:80px"', 
    rex = /\s*[\w-]+\s*:\s*[\w-]+\s*/g, 
    res = str.match(rex), 
    jsx = "style={{" + res[0] + "," + res[1] + "," + res[2] + "}}"; 

Le regex devrait être le même. Dans JS, vous obtenez un tableau de correspondances et dans Phyton vous devriez recevoir un objet de la même manière. Ensuite, il s'agit de recomposer la chaîne. Essayez-le sur la console.

Ok selon le commentaire. Voici une version réutilisable de cet extrait. Cela devrait fonctionner pour autant de propriétés CSS que vous pourriez avoir dans votre style en ligne.

var str = 'style="border:none; overflow:hidden; height:80px"', 
    rex = /\s*[\w-]+\s*:\s*[\w-]+\s*/g, 
    res = str.match(rex), 
    len = res.length, 
    jsx = "style={{"; 

for (var i = 0; i< len-1; i++){ 
    jsx = jsx + res[i] + ","; 
}; 
jsx = jsx + res[len-1] + "}}"; 
+0

Merci pour votre aide. En fait, il doit être plus universel (?) - par exemple, il peut y avoir plus de 3 ou moins de 3 éléments de style. De toute façon merci, je vais essayer avec votre surgestion;) – user6119787

+1

J'ai votre avis. C'est aussi très simple. En fait, j'allais écrire une version réutilisable mais je suppose que j'ai été un peu paresseux. Je vais corriger mon code en conséquence. – Redu