Reputation: 209
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
Upvotes: 19
Views: 14906
Reputation: 18555
An efficient solution is to let .*
consume 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).[\s\S]
instead of .
dot for multiline strings.Upvotes: 10
Reputation: 93086
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.
Upvotes: 25
Reputation: 3031
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+\)).)*$/
Upvotes: 0
Reputation: 75272
/\([^()]+\)(?=[^()]*$)/
The lookahead, (?=[^()]*$)
, asserts that there are no more parentheses before the end of the input.
Upvotes: 7