javascript中indexOf中的正则表达式

时间:2012-04-25 22:14:14

标签: javascript regex indexof

我想从元素的rel属性中获取我的程序参数,首先是逻辑吗?

并且rel属性可能包含此字符串rel="_p|b|w=300|h=200"rel="_p|w=300" ,所以我使用split将我的字符串拆分为|模式:

var attr = $(this).attr('rel').split('|');

_pb没有问题,因为我可以查看indexOfwh我应该使用正则表达式,因为{ {1}}和w值将会更改。

如何在indexOf中使用正则表达式?

抱歉我的英文不好

编辑:

h

4 个答案:

答案 0 :(得分:0)

首先,这不是一种非常优雅的数据检索方式。无论如何,如果你真的想以这种方式做到这一点,那么你可以使用如下的正则表达式:

var matches = $(this).attr('rel').match(/w=(\d+)/);
var w = (matches && matches[1]) || defaultValue;

另外,如果有多个元素以'w'结尾,那么你最好将你的正则表达式改为:

var matches = $(this).attr('rel').match(/(?:^|\|)w=(\d+)/);

答案 1 :(得分:0)

我会建议使用自定义属性,但是这些属性并不像你想要的那样符合。

一种简单的方法是拆分参数,然后遍历并检查每个索引是否是您期望的属性之一:

var cust_params = $(this).attr('rel').split('|'); //or this.rel as GGG suggested in a comment?

for(var i=0;i<cust_params.length;i++) {
    if('_p'==cust_params[i]) {
        //...
    }
    //...
    if(cust_params[i].match(/w=(\d+)/)) {
        //you could even do this without a regular expression
    }
}

我希望这并没有违反我不知道的一些好习惯,因为我总是觉得当我做这种事情时必须有一种更优雅的方式:)因为它是我得到一种快速 - 对此感到肮脏。

答案 2 :(得分:0)

与Paolo Bergantino一样,我也建议使用数据属性,,您可以将数据存储在JSON中(同样,在数据属性中)并解析:

<a href="#" data-info='{"width": "300", "height": "200", "color": "#fff", "etc": "foo"}'>

var info = JSON.parse(a.getAttribute('data-info'));

编辑:用Phrogz的建议替换eval

(使用eval:eval('(' + a.getAttribute('data-info') + ')')

答案 3 :(得分:0)

很抱歉,你无法使用普通的javascript在一个命令中执行此操作,indexOf只是不支持正则表达式。

您可以循环访问数组,也可以使用jquery支持的数组命令。

例如:如果您拥有数组attr,则可以使用jQuery.grep() http://api.jquery.com/jQuery.grep/

a_equal = jQuery.grep(attr, function(a, i){
  return (a.match(/=/) and i > 0); // modify this as you like
});

使用所有赋值参数创建数组a_equal

免责声明..代码尚未经过测试。