从转换字符串中提取不同的 css 转换?

Extract the different css transformations from a transform string?

这里是一个例子CSS 转换字符串:

rotate(-10 50 100)
translate(-36 45.5)
skewX(40)
scale(1 0.5)

从这个字符串我想

我该怎么做?

我最好的想法是使用 RegEx,但我还没有想出有效的 RegEx 解决方案:

[a-z]+?\([\-a-z0-9\s]*?\)

https://regex101.com/r/Ycjuxz/1

也欢迎大家对不使用RegEx的解决方案有不同的想法

基于 Teemu 的评论:

const text=`rotate(-10 50 100)
translate(-36 45.5)
skewX(40)
scale(1 0.5)`;
const rows = text.split('\n');
const transformations = rows.reduce((acc, cur) => {
  const key = cur.substring(0, cur.indexOf('('));
  const value = cur.replace(key, '').replace('(', '').replace(')', '');
  acc[key] = value;
  return acc
}, {});

console.log(transformations);

一个快速示例,说明如何使用正则表达式执行此操作并将结果简化为对象:

function parseTransform(transform) {
    return Array.from(transform.matchAll(/(\w+)\((.+?)\)/gm))
        .reduce((agg, [, fn, val]) => ({
            ...agg,
            [fn]: val
        })
        , {});
}

const res = parseTransform(`rotate(-10 50 100)
translate(-36 45.5)
skewX(40)
scale(1 0.5)`);

这个的输出是

{rotate: "-10 50 100", translate: "-36 45.5", skewX: "40", scale: "1 0.5"}

在此版本中,如果函数出现两次,我们将覆盖该函数的值。如果某些属性可以多次出现,您可以将它们合并在一起。