15

我想()使用javascript提取最后一个之间的文本

例如

var someText="don't extract(value_a) but extract(value_b)";
alert(someText.match(regex));

结果应该是

value_b

谢谢您的帮助

4

4 回答 4

20

试试这个

\(([^)]*)\)[^(]*$

在 regexr 上查看

var someText="don't extract(value_a) but extract(value_b)";
alert(someText.match(/\(([^)]*)\)[^(]*$/)[1]);

括号内的部分存储在捕获组 1 中,因此您需要使用它match()[1]来访问结果。

于 2012-05-05T06:38:15.757 回答
8

一个有效的解决方案是在最后一个之前.*吃掉所有东西(

var str = "don't extract(value_a) but extract(value_b)";

var res = str.match(/.*\(([^)]+)\)/)[1];

console.log(res);

  • .*\(匹配任意数量任意字符,直到最后一个文字(
  • ([^)]+) 捕获一个或多个不是 )
  • [1] 抓取第 1 组(第一个捕获组)的捕获。
  • 使用[\s\S]而不是.点表示多行字符串。

这是 regex101 的演示

于 2017-08-19T23:30:47.873 回答
7
/\([^()]+\)(?=[^()]*$)/

前瞻 ,(?=[^()]*$)断言在输入结束之前没有更多的括号。

于 2012-05-05T06:34:36.143 回答
0

如果最后一个右括号总是在句子的末尾,你可以使用乔纳森的答案。否则这样的事情可能会起作用:

/\((\w+)\)(?:(?!\(\w+\)).)*$/
于 2012-05-05T06:37:38.577 回答