检查id是否与模式匹配

时间:2014-04-14 07:38:44

标签: javascript jquery regex

我没有正则表达式极客,而且我一直在寻找,但我真的不知道如何做到这一点: 我需要使用看起来像mywordsomenumber的ID获取所有输入。例如,匹配ID为keyword1 keyword2等的所有输入

我试过

a=$("[id^=tokenfield(\d+)]");
a=$("[id^=tokenfield(0-9)]");

和其他一些人,但我对正则表达式并没有很好的理解,似乎我无法理解它的底部

有人可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:3)

我认为您不能使用RegEx来匹配属性。 [id ^ = tokenfield]将开始的属性与完全字符串'令牌字段'进行匹配。这是"以"开头?匹配,而不是"正则表达式匹配"。

您可以使用手动过滤器。

这是一个JSFiddle:http://jsfiddle.net/itsananderson/U233z/

基本上,您会找到以固定文本开头的所有元素("项目"在示例中),然后根据以数字结尾的ID的实际正则表达式匹配进行过滤。

var a = $('[id^=item]').filter(function() {
    return $(this).attr('id').match(/item[0-9]+/); 
});

编辑:注意到有人已经在评论中给出了类似的答案。无论如何,希望这对某人有用

答案 1 :(得分:0)

jQuery' Atribute starts with selector不支持正则表达式,它只适用于完全字符串。

您可以选择以"tokenfield"开头的节点,然后在javascript中执行额外检查:

$('[id^="tokenfield"]').filter(function(){
    // extract the remaining part :
    var tail = this.id.slice(10); // 10 == "tokenfield".length
    // run it through parseInt :
    var number = parseInt(tail, 10);

    // isNaN will tell you if the parseInt failed :
    var isNumber = !isNaN(number);

    return isNumber;
});

但是,正如文档中所述:

  

此选择器可用于标识由生成具有系统元素ID的HTML的服务器端框架生成的页面中的元素。但是它会比使用类选择器慢,所以如果可以的话,可以利用类来对类似的元素进行分组。

如果您可以控制生成html的代码,那么最好生成具有以下结构的节点:

<div class="tokenfield" data-token="123"></div>
<div class="tokenfield" data-token="456"></div>
<div class="tokenfield" data-token="789"></div>

用法示例:

$('.tokenfield').each(function(){
    var number = $(this).attr('data-token');
    // do something ...
 });
相关问题