Javascript 在所有这些情况下提取id

Javascript 在所有这些情况下提取id,javascript,jquery,Javascript,Jquery,在所有这些情况下,我如何始终提取数字11 id="section-11" id="test-11" id="something-11" 我做$(this.attr('id')那么接下来我该怎么做?实现这一点的方法有很多,一种是使用.split()如下: var id = "section-11"; var number = id.split(/-/)[ 1 ]; alert( number ); // 11 这将提取第一个数字匹配。假设最后两个数字将是id中唯一的数字,下面是一个正则

在所有这些情况下,我如何始终提取数字11

id="section-11" 
id="test-11"
id="something-11"

我做
$(this.attr('id')
那么接下来我该怎么做?

实现这一点的方法有很多,一种是使用
.split()
如下:

var id = "section-11";

var number = id.split(/-/)[ 1 ];

alert( number );  // 11

这将提取第一个数字匹配。

假设最后两个数字将是id中唯一的数字,下面是一个正则表达式替换:

var id = 'something-11';
var num = id.replace(/\D/g,'');

alert(num);
上述操作将从字符串中删除所有非数字字符


上面的
.split()
示例也可以使用,但您需要获取数组中的最高索引,如果您使用超过1个破折号命名id:sub-section-11

您可以通过“-”将字符串拆分为数组,然后您将从数组的第二位获取id。

/\D/g-全局非数字替换。我一直在尝试使用所有这些不同的示例运行jsperf.com测试,以查看哪一个更快。不走运。为什么人们总是直接跳到过量的正则表达式引擎?我不知道正则表达式是过量的。请分享。@John:如果您只需要在分隔符上拆分一个字符串,那么加载正则表达式引擎并对字符串进行完整解析显然是过火了。我真的不知道你想让我以什么方式“分享”?@Tomalak通过“分享”,我不介意一个事实性的解释。使用诸如“加载”之类的术语,“完全解析”显示了大量的偏差。你做过速度测试吗?在分隔符上拆分字符串(可能存在也可能不存在)并不总是可靠的。“something11”、“section11”、“something-other-11”等。如果有人想知道,我确实计算了这些数字——每个操作迭代了1000000次——split(“-”)运行时间约为800毫秒,.split(/-/)运行时间约为980毫秒,.match(/\d+/)运行时间约为1600毫秒(百万分之一)。所以Tomalak认为使用.split()的速度几乎是.match()的两倍是正确的。此外,使用字符串而不是带有split的正则表达式更快。就个人而言,我更喜欢match,因为正则表达式更强大。如果你能100%确信你正在解析的字符串将始终是某种格式的,那么字符串操作也很棒。+1感谢上帝!一个SO贡献者使用理智的方法来执行一个带有字符串的简单任务。
var id = 'something-11';
var num = id.replace(/\D/g,'');

alert(num);
var id = parseInt($(this).attr('id).substring($(this).attr('id').lastIndexOf('-')+1));