Regex for getting text between the last brackets (

2020-02-01 18:26发布

问题:

I want to extract the text between the last () using javascript

For example

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

The result should be

value_b

Thanks for the help

回答1:

Try this

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

See it here on regexr

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

The part inside the brackets is stored in capture group 1, therefor you need to use match()[1] to access the result.



回答2:

/\([^()]+\)(?=[^()]*$)/

The lookahead, (?=[^()]*$), asserts that there are no more parentheses before the end of the input.



回答3:

An efficient solution is to let .* eat up everything before the last (

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

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

console.log(res);

  • .*\( matches any amount of any character until the last literal (
  • ([^)]+) captures one or more characters that are not )
  • [1] grab captures of group 1 (first capturing group).
  • use [\s\S] instead of . dot for multiline strings.

Here is a demo at regex101



回答4:

If the last closing bracket is always at the end of the sentence, you can use Jonathans answer. Otherwise something like this might work:

/\((\w+)\)(?:(?!\(\w+\)).)*$/