使用正则表达式解析rotate3d值的CSS变换

时间:2015-11-30 18:41:49

标签: javascript css regex css-transforms

我需要将css变换值分成数组,但要将旋转值保持在一起。

例如:

'translate3d(20px, 5px, 10px) rotateX(20deg) rotateY(10deg) rotateZ(0deg) skew3d(20deg, 10deg) rotateX(-20deg) rotateY(100deg) rotateZ(-30deg)'

需要

[
    'translate3d(20px, 5px, 10px)',
    'rotateX(20deg) rotateY(10deg) rotateZ(0deg)',
    'skew3d(20deg, 10deg)',
    'rotateX(-20deg) rotateY(100deg) rotateZ(-30deg)'
]

您可以假设旋转始终按此顺序rotateX(20deg) rotateY(10deg) rotateZ(0deg)

如何在javascript中使用正则表达式执行此操作?谢谢!

1 个答案:

答案 0 :(得分:0)

假设旋转属性将始终按顺序排列,您可以使用以下正则表达式拆分字符串:/\s(?=\S+\(.*?\))(?!rotate(?:Y|Z))/

表达式/\s(?=\S+\(.*?\))(?!rotate(?:Y|Z))/将匹配\s个字符,如果它们后跟(?=\S+\(.*?\))个包含括号的字符。如果\s / rotateYrotateZ后跟(?!rotate(?:Y|Z))字符,它也会否定var string = 'translate3d(20px, 5px, 10px) rotateX(20deg) rotateY(10deg) rotateZ(0deg) skew3d(20deg, 10deg) rotateX(-20deg) rotateY(100deg) rotateZ(-30deg)'; var properties = string.split(/\s(?=\S+\(.*?\))(?!rotate(?:Y|Z))/); 个字符。

Example Here

[
    "translate3d(20px, 5px, 10px)",
    "rotateX(20deg) rotateY(10deg) rotateZ(0deg)",
    "skew3d(20deg, 10deg)",
    "rotateX(-20deg) rotateY(100deg) rotateZ(-30deg)"
]

返回:

rle