从第二对括号中获取值,忽略第一对中的数据
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>
你可以得到最后一个括号:
\((?!.*\().*\)
即使末尾有一个不完整的括号(只有一个 (
或 )
),您也可以获得最后一个完整的括号:
\((?!.*\(.*\)).*?\)
更新匹配括号内容:
\((?!.*\(.*\))(.*?)\)
看下面的例子
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>
我正在寻找一种从第二对括号中获取值的方法。
这是一个例子: 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>
你可以得到最后一个括号:
\((?!.*\().*\)
即使末尾有一个不完整的括号(只有一个 (
或 )
),您也可以获得最后一个完整的括号:
\((?!.*\(.*\)).*?\)
更新匹配括号内容:
\((?!.*\(.*\))(.*?)\)
看下面的例子
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>