从第二对括号中获取值,忽略第一对中的数据

时间:2017-08-02 13:28:16

标签: jquery regex extract

我正在寻找一种从第二对括号中获取值的方法。

这是一个例子: var foo =“bar - (鸡尾酒) - (醉);

现在我需要“喝醉”的价值,但不是“鸡尾酒”的价值。

我设法从第一对获得了价值,但仍然很难从第二对获得数据。

这是我提取第一个值的代码:

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

我太勇敢了,以为将数字1改为2可以解决它。 :)

当值为“bar - (鸡尾酒)”时,我会把它弄好,就像“鸡尾酒”一样,但是对于先前给定的var和两对括号,此代码的结果值为:

  

鸡尾酒) - (喝醉了

不完全是我想要的:(

任何人都可以帮我这个吗?

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

请看下面的例子

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

答案 2 :(得分:0)

您正在匹配第1个和最后一个括号之间的所有内容。 像这样修复你的正则表达式

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

你应该最终获得2次捕获

答案 3 :(得分:0)

你可以得到最后一个括号:

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

即使在最后有一个非完整的括号(只有一个()),你也可以得到最后一个完整的括号:

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

DEMO

更新以匹配括号内容:

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