2017-08-02 54 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

您的代码与更新后的答案完全一致将给出预期结果。 –

相关问题