查找并获取字符串中的数字

时间:2010-02-24 08:40:17

标签: javascript regex

请帮我解决这个奇怪的情况:

这是代码:

链接如此 - www.blablabla.ru#3

正则表达式是这样的:

var id = window.location.href.replace(/\D/, '' );
alert(id);

正则表达式是正确的 - 它必须只显示数字......但它没有显示数字:-(

您能否请教我并提供一些有关如何仅获取字符串数字的信息?

由于

4 个答案:

答案 0 :(得分:12)

您只用空字符串替换第一个非数字字符。尝试使用:

var id = window.location.href.replace(/\D+/g, '' ); alert(id);

(注意正则表达式末尾的“全局”标志)。

答案 1 :(得分:6)

考虑使用location.hash - 这只包含网址末尾的主题标签:"#42"
你可以写:

var id = location.hash.substring(1);

答案 2 :(得分:3)

修改:请参阅Kobi's answer。如果你真的使用哈希部分,只需使用location.hash! (对自己:Doh!)

但我会留下以下内容,以防你做的事比你的例子更复杂。

原始答案:

正如其他人所说,你已经在你的替代品中遗漏了全球旗帜。但是我担心这个表达,它真的很脆弱。考虑一下:www.37signals.com#42:你得到的数字字符串将是3742,这可能不是你想要的。其他示例:www.blablabla.ru/user/4#3(43),www2.blablabla.ru#3(23),...

如何'回合:

id = window.location.href.match(/\#(\d+)/)[1];

...它会在哈希标记之后立即获得连续的数字集(如果没有,则为undefined)。

答案 3 :(得分:1)

使用标记/\D/g,全局替换所有实例

var id = window.location.href.replace(/\D/g, '' );
alert(id);

根据Justin Johnson的说法,/\D+/的效果优于/\D/g,我认为因为\D+可以匹配并一次性替换它。