【问题标题】:Regex for selecting elements from transform matrix用于从变换矩阵中选择元素的正则表达式
【发布时间】:2012-06-29 11:14:27
【问题描述】:

我有以下方式给出的样式转换字符串:

matrix(0.312321, -0.949977, 0.949977, 0.312321, 0, 0)

如何形成一个包含该矩阵元素的数组?任何提示如何为此编写正则表达式?

【问题讨论】:

标签: javascript regex arrays css


【解决方案1】:

我会这样做......

// original string follows exactly this pattern (no spaces at front or back for example)
var string = "matrix(0.312321, -0.949977, 0.949977, 0.312321, 0, 0)";

// firstly replace one or more (+) word characters (\w) followed by `(` at the start (^) with a `[`
// then replace the `)` at the end with `]`
var modified = string.replace(/^\w+\(/,"[").replace(/\)$/,"]");
// this will leave you with a string: "[0.312321, -0.949977, 0.949977, 0.312321, 0, 0]"

// then parse the new string (in the JSON encoded form of an array) as JSON into a variable
var array = JSON.parse(modified)

// check it is correct
console.log(array)

【讨论】:

  • 谢谢,但这对我来说已经足够了:JSON.parse(`[${string.slice(7,-1)}]`)
【解决方案2】:

这是一种方法。用正则表达式解析出数字部分,然后使用split() 方法:

var s = "matrix(0.312321, -0.949977, 0.949977, 0.312321, 0, 0)";
s.match(/[0-9., -]+/)[0].split(", "); // results in ["0.312321", "-0.949977", "0.949977", "0.312321", "0", "0"]

【讨论】:

  • 不要使用e- 例如:matrix(6.12323e-17, -0.949977, 0.949977, 0.312321, 0, 0)
【解决方案3】:

试试这个:

/^matrix\(([+\-\d.]+), ([+\-\d.]+), ([+\-\d.]+), ([+\-\d.]+), ([+\-\d.]+), ([+\-\d.]+)\)$/
    .exec(str).slice(1);

DEMO

【讨论】:

  • 不适用于e- matrix(6.12323e-17, 1, -1, 6.12323e-17, 0, 0)
【解决方案4】:

可能是这样的:

var string = "matrix(0.312321, -0.949977, 0.949977, 0.312321, 0, 0)";

var array = string.replace(/^.*\((.*)\)$/g, "$1").split(/, +/);

请注意,通过这种方式,数组将包含字符串。如果你想要实数,一个简单的方法是:

array = array.map(Number);

你的 js 引擎需要支持map 或者有一个垫片(当然你也可以手动转换)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2011-11-03
    • 2015-11-25
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多