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

get value from second pair of brackets, ignore data from first pair

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

这是一个例子: var foo = "bar - (cocktails) - (drunk);

现在我需要值 "drunk",但不需要值 "cocktails"。

我设法从第一对中获取了值,但仍在努力从第二对中获取数据。

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

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

我太勇敢了,没想到把数字1改成2就解决了。 :)

当值为 "bar - (cocktails)" 时,我会做对的,例如 "cocktails",但是对于之前给出的带有两对括号的 var,此代码的结果值为:

cocktails) - (drunk

不完全是我想要的:(

有人可以帮我解决这个问题吗?

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

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

你应该得到 2 个捕获

你可以通过两个改变得到你想要的:

  • 为全局匹配(多个匹配)添加/g,否则它会在第一个匹配时停止
  • 添加 ? 表示(基本上)'shortest match possible'

如:

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

随着对 /g 的更改,return 是一个匹配数组,因此第一个是 [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>

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

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

即使末尾有一个不完整的括号(只有一个 ()),您也可以获得最后一个完整的括号:

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

DEMO

更新匹配括号内容:

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

看下面的例子

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>