2017-08-02 21 views
0

我正在尋找一種方法從第二對括號中獲取值。從第二對括號中獲取值,忽略來自第一對的數據

這是一個例子: VAR富=「欄 - (雞尾酒) - (醉);

現在我需要值 「醉」,但不是值 「雞尾酒」

我設法從第一對中的值,但仍掙扎着從第二對獲得的數據

這是我的代碼提取前值:

var foo = "bar - (cocktails) - (drunk)"; 
chosenfoo = foo; 
filterOut = /\((.*)\)/i; 
var strippedFoo= chosenfoo.match(filterOut)[1]; 
$('#foobarfield').val(strippedFoo); 

我太勇敢,認爲將數字1更改爲2會解決它。 :)

當值爲「bar - (雞尾酒)」時,我會把它弄好,就像「雞尾酒」一樣,但是以前給出的var和兩個括號對的結果值是:

雞尾酒) - (醉

不是我想要的到底是什麼:(

任何人都可以幫我在這一個

+1

第二或最後一對括號? –

+0

在這種情況下,第二對。 Allthough,瞄準最後一個也會做這個伎倆。 – George

回答

0

請看下面的例子

var foo = "bar - (cocktails) - (drunk)"; 
 
var strippedFoo= foo.match(/\((.*?)\)/gi)[1].replace(/\(|\)/g, "");; 
 
alert(strippedFoo)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

哦該死的..是啊..好吧..我認爲它可以在正則表達式內完成,但看到這個解決方案後,我只是在我面前:P Tnx一百萬這個非常明確的答案和解決方案 – George

+0

@George很高興我能夠提供幫助。 –

0

你是誰?匹配第一個和最後一個括號之間的所有內容。 解決您的正則表達式這樣

/\((.*?)\)/gi 

,你應該結束了2捕獲

1

你可以得到你想要的東西有兩個變化:

  • 全球賽事增添/g(多個匹配)否則它停止第一場比賽
  • ?意思是(基本上)'可能的最短比賽'

如:

/\((.*?)\)/gi 

隨着改變/ g,則返回是匹配的陣列,所以首先是[0]和第二[1]

段:

var foo = "bar - (cocktails) - (drunk)"; 
 
chosenfoo = foo; 
 
filterOut = /\((.*?)\)/gi; 
 
var strippedFoo= chosenfoo.match(filterOut)[1]; 
 
$('#foobarfield').text(strippedFoo);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='foobarfield'></div>

+0

好吧,這與我想要得到的結果非常接近,但由於某種原因,它將結果添加到括號中。所以現在我有(雞尾酒)和(醉)作爲分離值,所以我該如何適應這個在沒有托架的情況下得到「雞尾酒」和「醉酒」? 不要誤解我的意思,當我只是用原始代碼瞄準第一個代碼時,我會得到「雞尾酒」......所以這裏有什麼不同? – George

+0

我可能只是用'.replace'去,但看起來不是你想要的,所以我正在研究非捕獲組,併爲你預測。目前尚不清楚爲什麼JS會在我看來包含括號(例如C#不會)。 –

0

你可以得到l AST支架與此:

\((?!.*\().*\) 

而與此一個,你可以得到即使是一個非完整的支架上一個完整的支架(只是一個())結尾:

\((?!.*\(.*\)).*?\) 

\((?!.*\(.*\))(.*?)\) 
DEMO

更新以括號的內容相匹配

+0

這段代碼還會返回帶括號的值,如「(雞尾酒)」和「(醉)」...我需要這些沒有括號本身。 – George

+0

您的代碼與更新後的答案完全一致將給出預期結果。 –