3

このような配列を取得するにはどうすればよいですか

[
    0: [ "first", "value", "1" ],
    1: [ "second", "value", "2" ],
    2: [ "third", "value", "3" ]
]

またはさらに良い

[ "first", "value", "1", "second", "value", "2", "third", "value", "3" ]

文字列から

"first.value[1].second.value[2].third.value[3]"

単一のRegEx.exec()実行に依存していますか?

私はこれを試しました:

regex = /\.*([\w]+)\.([\w]+)\[([\d]*)\]/g;
var str = "first.value[1].second.value[2].third.value[3]";
result = regex.exec(str);

しかし、サブキャプチャ グループを取得できません (最初の例のように)。

PS -両方のタイプの結果 (フラット配列またはネストされた配列)の正規表現sを取得したいと思います

4

5 に答える 5

3

編集の結果があなたの求めているものである場合

[「最初」、「値」、「1」、「2 番目」、「値」、「2」、「3 番目」、「値」、「3」]

次に、非常に単純な正規表現を使用できます。

/(\w+)/g

正規表現はネストされた構造を返すことができないため、最初の効果を達成するための最もクリーンな方法は、いくつかの配列操作を必要とします。

上記の正規表現 ( /(\w+)/g) を使用してmatched配列を取得し、次のように実行できます。

var finalArr= [];

for (var i= 1, j= 0; i < matched.length; i += 3) {
  finalArr[j] = match.slice(i, 3);
  j++;
}
于 2016-02-18T12:45:57.717 に答える
3

私は使用しますsplit

var str = "first.value[1].second.value[2].third.value[3]";
var res = str.split(/\]\.?|\[|\./)
于 2016-02-18T12:47:25.180 に答える
2

パターンのアイデアに従って、次のような正規表現を使用できます。

(.*?)\.(.*?)\[(\d+)\]\.?

ワーキングデモ

試合情報

MATCH 1
1.  [0-5]   `first`
2.  [6-11]  `value`
3.  [12-13] `1`
MATCH 2
1.  [15-21] `second`
2.  [22-27] `value`
3.  [28-29] `2`
MATCH 3
1.  [31-36] `third`
2.  [37-42] `value`
3.  [43-44] `3`
于 2016-02-18T12:45:41.413 に答える
1

string.match(/(\w+)/g)文字列の match メソッドは、探している配列を生成できます。で単語を抽出するだけ\wです:

var regex = /(\w+)/g;
var str = "first.value[1].second.value[2].third.value[3]";

var arr = str.match(regex)


document.querySelector('pre').innerHTML = JSON.stringify(arr, 0, 4);
<pre></pre>

于 2016-02-18T12:45:50.927 に答える
0

].を使用して分割し、次のステップで を使用して分割する 2 つのステップで試すことができます.

var str = "first.value[1].second.value[2].third.value[3]";
var tempArr  = (str+'.').replace(/\[/g,'.').split('].');
var finalArr = tempArr.map(function(v){return v.split('.');});

//result: [["first", "value", "1"], ["second", "value", "2"], ["third", "value", "3"], [""]]
于 2016-02-18T12:51:47.587 に答える