0

私は正規表現に本当に慣れていないので、答えを見つけるために周りを見回していますが、うまくいかないか、何らかのエラーが発生するので、質問をしようとします。誰かが私を案内してくれることを願っています:)

次のような文字列があります。

str = "車[ブランド=サーブ][ホイール=4]"

いくつかの異なる一致を直接取得できるかどうか、または異なる .match() が必要かどうかはわかりませんが、とにかく。

1 つの変数の最初の [] の前にすべてが必要です。

次に、別のサーブと 3 分の 4 が必要です。

4

6 に答える 6

7

.replaceコールバック関数を使用すると、javascript でカスタム フォーマットを解析するときに最適なツールになります。検討:

parse = function(s) {
    var result = {};
    s.replace(/^(\w+)|\[(.+?)=(.+?)\]/g, function($0, $1, $2, $3) {
        result[$2 || "kind"] = $1 || $3;
    });
    return result;
}

例:

str = "car[brand=saab][wheels=4][price=1234][morestuff=foobar]"
console.log(parse(str))
// {"kind":"car","brand":"saab","wheels":"4","price":"1234","morestuff":"foobar"}
于 2013-05-27T15:07:24.713 に答える
3

次の正規表現を使用できます。

([^\[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]

その後、一致するグループ #1、#2、および #3 を取得できます。

ライブデモ: http://www.rubular.com/r/XNZfHcMAp8

Javascript の場合:

str = 'car[brand=saab][wheels=4]';
console.log('match::' + str.match(/([^[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]/));
于 2013-05-27T14:52:32.733 に答える
1
/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/

動作します。

みたいにやってみる

var result = "car[brand=saab][wheels=4]".match(/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/)

結果は

[ "car[brand=saab][wheels=4]", "car", "saab", "4" ]
于 2013-05-27T14:49:50.013 に答える
1

私はこれがうまくいくはずだと思います:

([^[]+)(?:\[[^=]+=([^\]]+)\])+

説明:

([^[])まず、[ ではないものすべてに一致します。

(?:...)+そして、それを見つけたとき、あなたはパターンを繰り返し始めています

\[[^=]= ではないものをすべて見つけて破棄します。

([^\]])] ではないものをすべて見つけてキャプチャします。

于 2013-05-27T14:46:11.757 に答える
0

一発でマッチして、配列を取り戻すことができます。

以下の行はクロムコンソールでテストされました:

str = "car[brand=saab][wheels=4]";
"car[brand=saab][wheels=4]"
str.match(/[^=[\]]+(?=[[\]])/g)
["car", "saab", "4"]
于 2013-05-27T14:56:00.227 に答える