我有正则表达式,用于在括号中提取值。
它大部分时间都在工作,但在用括号结束时却没有
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结尾)。我想要之间的价值。
答案 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>