正则表达式,在括号之间捕获,javascript

时间:2016-10-27 08:17:49

标签: javascript regex

我有正则表达式,用于在括号中提取值。

它大部分时间都在工作,但在用括号结束时却没有

var val = 'STR("ABC(t)")';
var regExp = /\(([^)]+)\)/;.
var matches = regExp.exec(val);
    ​
console.log(matches[1]); //"ABC(t"

我想要的是"ABC(t)".

我有什么想法可以将我的正则表达式修改为Achive吗?

更新 该值始终位于括号内。

一些例子:

'ASD("123")'; => '123'
'ASD(123)'; => '123'
'ASD(aa(10)asda(459))'; => 'aa(10)asda(459)'

首先有一些文字(总是文字)。然后有一个(,它总是以a结尾)。我想要之间的价值。

1 个答案:

答案 0 :(得分:2)

您可以在第1组模式中使用贪婪点匹配:/\((.+)\)/。它将匹配第一个(,然后匹配换行符号以外的任何1个字符,然后匹配行中的最后一个)

var vals = ['STR("ABC(t)")', 'ASD("123")', 'ASD(123)', 'ASD(aa(10)asda(459))'];
var regExp = /\((.+)\)/;
for (var val of vals) {
  var matches = regExp.exec(val);
  console.log(val, "=>", matches[1]);
}

回答评论:如果要提取的文本必须在嵌套的平衡括号内,则可以使用小的解析代码或XRegExp#matchRecursive。由于SO上有很多解析代码,我将提供XRegExp示例:

var str = 'some text (num(10a ) ss) STR("ABC(t)")';
var res = XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>