RegEx:提取包含的数字

时间:2014-03-06 18:13:15

标签: javascript jquery regex

所以这是我的问题。我需要从以下任何一个中提取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/';

我循环浏览网页上的所有链接,并将符合上述条件的所有数字添加到数组中,以便稍后执行。 :)

2 个答案:

答案 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;
}