2016-07-15 4 views
1

私は変数に動的値を持ち、それぞれ[と]で区切っています。2つの再発文字の間で文字列を分割する

var data="[Continuing] [Returning] "; or 
var data="[ACCT_BBA] "; or 
var data="[12001] [12009] [21077] [13880] "; 
var data="[13880] "; 

上記の[と]の間の値を抽出するためにsplit関数を使用する方法はありますか?

var arr= data.split("<what goes here?>"); 

最後の例で取得する:12001、12009、21077、13880

+1

のように、文字の範囲で\wを置き換えることができますか? – Hogan

+0

私はOPが何を達成したいと思うかは、中括弧の間の値を得ることです。 '〜 ' var values = ["Contining"、 "Returning"]; ' これは正規表現を使って実現できます。 – MetalRiders

答えて

5
data.slice(1, -2).split("] [") 

が仕事をする必要がありますが、またはあなたの開始と終了が不確実かもしれない場合

data.replace(/^\s*\[|\]\s*$/g, "").split("] [") 

また、あなたはもっと複雑なものが必要な場合は、選択は通常、グローバルな正規表現と.matchである、またはあなたが任意にネストされた構造物を処理する必要がある場合は、独自のパーサを構築します。

+0

とてもいいです。そしてバグのあるasenovmの答えより速い。 – Hogan

+0

部分的に動作します。最後に抽出された値にはaがあります。私が実行したテストから、mplungjanの解決策は動作しています –

+0

@ D.Rattansingh:あなたの 'data'が'] 'で終わらないことを示唆しています。スペースが残っているかもしれませんか?このようなことに対処する必要がある場合は、最初と最後の '' slice''の代わりに '.replace(/^\ s * \ [| \] \ s * $/g、" ")キャラクター。 – Bergi

2

使用このような

data.split('] [').map(function (item) { return item.replace("]", "").replace("[", "")}) 

//var data="[Continuing] [Returning]"; 
 
    // var data="[ACCT_BBA]"; 
 
    var data="[12001] [12009] [21077] [13880]"; 
 

 
    var res = data.split('] [').map(function (item) { return item.replace("]", "").replace("[", "")}) 
 
    console.log(res)

+0

この単純なケースでは、 '[[one]] [[two]]'は失敗しますが、 '['や ']'はありません。最初の要素の最初の文字と最後の要素の最後の文字に置換を適用する必要があります - map()を使用しない – Hogan

+0

@Hoganは使用されていません。 – mplungjan

+0

@mplungjan - Bergiの答えを参照してください。オペレーションの意図は明らかです...ブラケットの中のものを変更しないでください(少なくとも30年程度の要件を読んだ後に私が想定するものです) – Hogan

0

はい、あなたがしなければ:

var data="[12001] [12009] [21077] [13880]"; 

var arr = data.split(" "); 

for(let i = 0; i < arr.length; i++){ 
    arr[i] = arr[i].replace('[',''); 
    arr[i] = arr[i].replace(']',''); 
} 
console.log(arr); 

単なる例、非常に基本的なもの。

1

どうdata.match(/\[(\w+)\]/g).map(e => e.slice(1, -1))について

そして、あなたはあなたが正確に抽出したいです何[a-zA-Z0-9_]

関連する問題