6

次の方法で指定されたスタイル変換の文字列があります。

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

この行列の要素を含む配列を形成するにはどうすればよいですか? このための正規表現の書き方に関するヒントはありますか?

4

4 に答える 4

8

私はこのようにします...

// 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)
于 2012-06-27T23:24:24.883 に答える
4

これが1つの方法です。数値部分を正規表現で解析してから、次の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"]
于 2012-06-28T01:07:10.723 に答える
1

そのようなものかもしれません:

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 エンジンはマップをサポートするか、マップ用の shim を持っている必要があります (もちろん、それらを手動で変換することもできます)。

于 2012-06-28T00:17:55.260 に答える
1

これを試して:

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

デモ

于 2012-06-27T23:23:20.307 に答える