I'm a bit rusty on my regexp and Javascript. I have the following string var:
var subject = "/admin.php?page=settings&tabs_added[114787535263592]=1&tabs_added[217770811582323]=1&tabs_added[198738186831542]=1"
I want to extract 114787535263592
, 217770811582323
and 198738186831542
.
I've tried to use non-capturing parenthesis (?:)
:
var regexp = /(?:tabs_added[\[])(\d)+(?:[\]])/;
var pageid = regexp.exec(subject);
But the result I get ( ["tabs_added[114787535263592]", "2"]
) is not what I expected -- what am I doing wrong? Here's a jsFiddle: http://jsfiddle.net/KgpAw/
You were very close. You need to capture the +
as well. Otherwise you only capture one decimal digit:
var regexp = /(?:tabs_added[\[])(\
You should also make your regex global to find all matches:
var regexp = /(?:tabs_added[\[])(\d+)(?:[\]])/g;
Then you should loop through the results, you also don't need to have non-capturing groups because you're not using a quantifier on them ( ?
, +
, or *
), nor do you need to put your [
and ]
inside a character class:
var regexp = /tabs_added\[(\d+)\]/g;
var result;
while(null != (result = regexp.exec(subject))){
document.write(result[1] + '<br />');
}
Note: It's better to use console.log
for debugging purposes than document.write
as long as you have a console available. (Chrome, Opera, IE9, and Firefox have consoles built in, and I think Safari does too, so you should have one available.) console.log
provides much more valuable information when logging objects and arrays.
You need global flag and match all digits: (\\d+)
instead of (\\d)+
.
And don't need all those non-capturing subgroups.
var regexp = /tabs_added\[(\d+)\]/g;
var pageIds = [], match;
while(match = re.exec(str)) pageIds.push(match[1]);
pageIds;
Hi i can solve above requirement in one line code.
<!DOCTYPE html>
<html>
<body>
<script>
var str="/admin.php?page=settings&tabs_added[114787535263592]=1&tabs_added[217770811582323]=1&tabs_added[198738186831542]=1";
var patt1=/\d{15}/g;
document.write(str.match(patt1));
</script>
</body>
</html>
For multiple matches, you need to use the g modifier. Please try the following
var regexp = /(?:tabs_added[\[])(\d)+(?:[\]])/g;
var pageid = subject.match(regexp);
This will still contain the tabs_added part, but that can be removed separately
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.