'style =“border:none;溢出:隐藏;高度:80px”'到js对象python re.sub

时间:2016-03-27 06:44:11

标签: javascript python regex reactjs jsx

我是开发人员并与IUEditor合作,可以从设计中获得html/css/js

但遗憾的是,我们的项目是由React构成的,所以我必须将html编译为jsx。所以我自己做了,使用python,除了一个。

我必须改变

  

style =“border:none; overflow:hidden; height:80px”

属于jsx对象,应该是

  

style = {{border:none,overflow:hidden,height:80px}}

您可能会问,为什么不使用https://facebook.github.io/react/html-jsx.html,但实际上IUEditor在其他地方使用它是一个属性,并且jsx默认不允许使用它们。

无论如何,问题是我想通过python re.sub方法将样式html标签更改为jsx的样式对象。我怎样才能做到这一点?!向正则表达大师请求帮助;)

1 个答案:

答案 0 :(得分:1)

使用re.search方法可能会更简单。您将获得结果并构建JSX。我在Phyton并不完美,但在JS中,这很容易通过

完成
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] + "}}";

正则表达式应该是相同的。在JS中你得到一系列匹配,在Phyton中你应该以类似的方式返回一个对象。然后就是重新组合字符串了。在控制台上试试。

好评根据评论。以下是此代码段的可重用版本。它应该适用于您的内联样式中可能包含的许多CSS属性。

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] + "}}";