javascript - CSS 'translate(0px, 0px)' 元素样式的正则表达式匹配值

标签 javascript css regex match translate

给定一个样式属性字符串,我需要捕获 CSS translate() 属性的 x 和 y 值。数字可以是零、正数或负数、 float 或整数,并且只能以像素为单位。

一个实用的样式属性字符串示例:

min-height: 100%;
min-width: 100%;
transition-property: transform;
transform-origin: 0px 0px;
transform: translate(123px, 0px) translateZ(0px);

我有一个可行的解决方案,虽然非常丑陋。这是一个分割:

var transform = element.style['transform'] - transform 变量然后包含此字符串:"translate(123px, 0px) translateZ(0px) "

然后我将它与:

transform = transform.match(/translate\(-?[0-9]+(\.[0-9]*)?px, -?[0-9]+(\.[0-9]*)?px\)/);

我这样做是为了在有另一个变换属性时,例如 rotate(20px, 20px),我可以避免它。

正则表达式生成此数组:["translate(123px, 0px)", undefined, undefined]

然后按顺序使用另一个正则表达式,仅匹配数值:

transform = transform[0].match(/(-?[0-9]+(\.[0-9]*)?)px, (-?[0-9]+(\.[0-9]*)?)px/);

然后我得到以下数组:["123px, 0px", "123", undefined, "0", undefined]

为了完成我需要 parseInt(transform[1])parseInt(transform[3]) 实际处理这些值的一切。

只获取这两个数字似乎工作量太大,但我对正则表达式不是很有经验,我不知道如何简化它。有没有更优雅的解决方案?

编辑:我特别乐意将其全部变成一个正则表达式 :)

最佳答案

您可以将组标记为非捕获 (?:.) 不会充当捕获,但在其他方面表现正常。而\d[0-9]是一样的。但也因为无论如何这都必须是有效的 CSS,您可以假设数据无论如何都是有效的整数/ float ,并且不必执行可选的捕获(如果您不想的话)。

我会这样做:

transform = transform[0].match(/(-?[.\d]+)px, (-?[.\d]+)px/);

或者,使用可选小数点的非捕获组:

transform = transform[0].match(/(-?\d+(?:\.\d+)?)px, (-?\d+(?:\.\d+)?)px/);

关于javascript - CSS 'translate(0px, 0px)' 元素样式的正则表达式匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479899/

相关文章:

html - 两种不同浏览器上的两种不同宽度

php - preg_match 不接受新行

c# - 将 WHERE sql 子句拆分为数组

javascript - 方括号内的交替运算符不起作用

javascript - Node 类中的Memoizee实例方法

javascript - 删除了以下划线开头的 Firebase 数据库键

html - 无法使具有背景图像的三个 div 响应

javascript - 在 JavaScript 中对网格数据进行排序。排序函数出错

javascript - JSON 的智能感知帮助?

css - 是否可以使用 CSS 在 IE 中创建网格图像或错误图像?