所以这是我的问题。我需要从以下任何一个中提取12345:
var dURL1='http://www.domain.com/?some_id=12345';
var dURL2='http://www.domain.com/sub/anotherSub/12345';
var dURL3='http://www.domain.com/sub/anotherSub/12345-some-random-text';
var dURL4='sub/anotherSub/12345';
var dURL5='sub/anotherSub/12345-some-other-random-text';
var dURL6='/sub/anotherSub/12345';
var dURL7='/sub/anotherSub/12345-some-other-random-text';
我有:
/(\S+)?(sub\/anotherSub\/|\?some_id=)\d+(-\S+)?/g
但是,正如您所知,如果我将上述内容添加到替换中,它将替换整个字符串,数字和所有内容。如何更换除数字之外的所有内容?
修改: 问题是,我会有一些不遵循上述格式的链接。一些链接可能是:
var dURL8='http://www.google.com/';
我循环浏览网页上的所有链接,并将符合上述条件的所有数字添加到数组中,以便稍后执行。 :)
答案 0 :(得分:1)
你可以试试这个:
var result = yourstr.replace(/^.*?(?:(?:\bsub\/anotherSub\/|\?some_id=)(\d+))?[^\d\/]*$/, '$1');
模式细节:
^ # anchor for the start of the string
.*? # all characters until the capturing group (lazy quantifier)
(?: # an optional non capturing group
(?: # a non capturing group with the 2 possibilities
\bsub\/anotherSub\/
| # OR
\?some_id=
) # close the second non capturing group
(\d+) # capturing group 1 with digits:
)? # close the first non capturing group and make it optional
[^\d\/]* # all that is not a digit or a slash
$
请注意,如果您想获取带有http://domain.com
答案 1 :(得分:0)
您可以这样做:
var num = dURL1.match(/\d+/)[0]; // 12345
这应该适用于您的所有示例,因为您在任何地方都没有数字。
如果域名中有数字,那么您可以使用:
您可以使用:
var tot = 0;
if (/sub\/anotherSub\/\d/.test(url)) {
var num = url.match(/[=\/](\d+)/)[1];
tot += num;
}