I am trying to write a regular expression which returns a string which is between parentheses. For example: I want to get the string which resides between the strings \"(\" and \")\"
I expect five hundred dollars ($500).
would return
$500
Found Regular Expression to get a string between two strings in Javascript
But I\'m new with regex. I don\'t know how to use \'(\', \')\' in regexp
You need to create a set of escaped (with \\
) parentheses (that match the parentheses) and a group of regular parentheses that create your capturing group:
var regExp = /\\(([^)]+)\\)/;
var matches = regExp.exec(\"I expect five hundred dollars ($500).\");
//matches[1] contains the value between the parentheses
console.log(matches[1]);
Breakdown:
\\(
: match an opening parentheses
(
: begin capturing group
[^)]+
: match one or more non )
characters
)
: end capturing group
\\)
: match closing parentheses
Here is a visual explanation on RegExplained
Try string manipulation:
var txt = \"I expect five hundred dollars ($500). and new brackets ($600)\";
var newTxt = txt.split(\'(\');
for (var i = 1; i < newTxt.length; i++) {
console.log(newTxt[i].split(\')\')[0]);
}
or regex (which is somewhat slow compare to the above)
var txt = \"I expect five hundred dollars ($500). and new brackets ($600)\";
var regExp = /\\(([^)]+)\\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
var str = matches[i];
console.log(str.substring(1, str.length - 1));
}
Ported Mr_Green\'s answer to a functional programming style to avoid use of temporary global variables.
var matches = string2.split(\'[\')
.filter(function(v){ return v.indexOf(\']\') > -1})
.map( function(value) {
return value.split(\']\')[0]
})
For just digits after a currency sign : \\(.+\\s*\\d+\\s*\\)
should work
Or \\(.+\\)
for anything inside brackets
Simple solution
Notice: this solution used for string that has only single \"(\" and \")\" like string in this question.
(\"I expect five hundred dollars ($500).\").match(/\\((.*)\\)/).pop();
Online demo (jsfiddle)
To match a substring inside parentheses excluding any inner parentheses you may use
\\(([^()]*)\\)
pattern. See the regex demo.
In JavaScript, use it like
var rx = /\\(([^()]*)\\)/g;
Pattern details
\\(
- a (
char
([^()]*)
- Capturing group 1: a negated character class matching any 0 or more chars other than (
and )
\\)
- a )
char.
To get the whole match, grab Group 0 value, if you need the text inside parentheses, grab Group 1 value:
var strs = [\"I expect five hundred dollars ($500).\", \"I expect.. :( five hundred dollars ($500).\"];
var rx = /\\(([^()]*)\\)/g;
for (var i=0;i<strs.length;i++) {
console.log(strs[i]);
// Grab Group 1 values:
var res=[], m;
while(m=rx.exec(strs[i])) {
res.push(m[1]);
}
console.log(\"Group 1: \", res);
// Grab whole values
console.log(\"Whole matches: \", strs[i].match(rx));
}
var str = \"I expect five hundred dollars ($500) ($1).\";
var rex = /\\$\\d+(?=\\))/;
alert(rex.exec(str));
Will match the first number starting with a $ and followed by \')\'. \')\' will not be part of the match. The code alerts with the first match.
var str = \"I expect five hundred dollars ($500) ($1).\";
var rex = /\\$\\d+(?=\\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
alert(matches[i]);
}
This code alerts with all the matches.
References:
search for \"?=n\"
http://www.w3schools.com/jsref/jsref_obj_regexp.asp
search for \"x(?=y)\"
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp