You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则提取CSS rotate属性中括号内的有理数并返回单个数值?

解决CSS transform中提取rotate角度的问题

嘿,我来帮你搞定这个提取角度的需求!你的原正则之所以会捕获到带左括号的内容,是因为把(包含进了捕获组里,而且前面的.*其实没必要——我们可以直接精准匹配rotate()部分,只捕获数字部分。

优化后的正则方案

我们调整正则表达式,把括号排除在捕获组之外,同时精准匹配支持整数和小数的数字:

// 用正则字面量更简洁,避免过多转义
const re = /rotate\(\s*(\d+\.?\d*)\s*deg\)/;
const transform = "rotate(33.8753deg) translateZ(0px)";
const match = transform.match(re);

提取纯数值并转为数字

匹配结果里,match[1]就是不带括号的纯数字字符串,我们只需要把它转为数值类型即可:

if (match) {
  const degRate = parseFloat(match[1]); // 得到 33.8753(数值类型)
  console.log(degRate);
} else {
  // 处理没有匹配到rotate的情况,比如返回0或者null
  console.log("没有找到rotate角度");
}

封装成函数直接返回数值

如果你想直接返回单个数值而不是数组,可以封装成一个工具函数,调用起来更方便:

function getRotateAngle(transformStr) {
  const regex = /rotate\(\s*(\d+\.?\d*)\s*deg\)/;
  const result = regex.exec(transformStr);
  // 匹配到就返回数值,没匹配到返回null(或者你需要的默认值,比如0)
  return result ? parseFloat(result[1]) : null;
}

// 使用示例
const transform = "rotate(33.8753deg) translateZ(0px)";
const angle = getRotateAngle(transform);
console.log(angle); // 输出 33.8753

为什么这个正则有效?

  • rotate\(:精准匹配rotate(,\(是转义后的左括号(括号在正则里是特殊字符)
  • \s*:匹配0个或多个空格(兼容rotate( 33.8753deg)或者rotate(33.8753 deg)这种带空格的情况)
  • (\d+\.?\d*):捕获数字部分,\d+匹配1个或多个整数,\.?匹配可选的小数点,\d*匹配可选的小数部分
  • \s*deg\):匹配0个或多个空格,然后是deg)

这样就能精准捕获到不带括号的纯数字,再转成数值就是你想要的结果啦!

内容的提问来源于stack exchange,提问作者Yinon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:11:51