所以我有这个transform
计算样式
matrix3d(1.5, -7, 2, 0, 7, 1.5, 0, 0, -3, 1, 1, 0, 100, 0, 0, 1)
接下来我想转换为数字数组
var s = window.getComputedStyle(element);
var mattrixArray = s.replace(/3d|matrix|(|)|\s|/g,'').split(','), l = mattrixArray.length;
for (var i=0; i<l; i++){
mattrixArray[i] = parseInt(mattrixArray[i],10);
}
console.log(mattrixArray)
返回
[NaN, -7, 2, 0, 7, 1.5, 0, 0, -3, 1, 1, 0, 100, 0, 0, 1]
如果我没有parseInt(value)
它显示正确,但它是string
,该怎么办?
答案 0 :(得分:3)
您没有逃脱正则表达式中的(
和)
。
/3d|matrix|(|)|\s|/g
^ ^
如果你纠正这个是这样的:
/3d|matrix|\(|\)|\s|/g
正则表达式也正确地删除了parantheses,从而产生了一个可以成功插入parseInt
或parseFloat
的数组:
["1.5", "-7", "2", "0", "7", "1.5", "0", "0", "-3", "1", "1", "0", "100", "0", "0", "1"]
答案 1 :(得分:0)
你的正则表达式根本不替换括号。需要一些逃脱!
var s = window.getComputedStyle(element);
var mattrixArray = s.replace(/3d|matrix|\(|\)|\s|/g,'').split(',')
, l = mattrixArray.length;
for (var i=0; i<l; i++){
mattrixArray[i] = parseFloat(mattrixArray[i],10);
}
console.log(mattrixArray);
同时使用parseFloat
代替parseInt
,这样您就可以获得实际值而不是舍入值。
或者你可以这样做:
var mattrixArray = s.split("(")[1].split(")")[0].split(',')
编辑:刚刚测试过,分裂3次比使用正则表达式快4倍。