每个HTML div需要项

时间:2015-05-01 13:39:43

标签: jquery match each

HTML:

<div><input type="text" name="">{name}</div>
<div><input type="radio" name="{demo}" value="{yes}"></div>
<div><input type="radio" name="{demo}" value="{no}"></div>

JS:

$.each($('div'), function (k, v) {
    var s = $(v).html();
    console.log(s.match(/{(.*)}/gi));
});

我正在尝试解析{花括号}中包含的所有项目。

我希望看到以下结果:

['{name}', '{demo}', '{yes}', '{no}']

但是当我运行代码时,我得到了这个代码:

['{name}', '{demo} value="{yes}', '{demo} value="{no}']

2 个答案:

答案 0 :(得分:0)

/{(.*)}/gi

在正则表达式中,*量词是&#34;贪心&#34;默认情况下。这意味着它将尝试尽可能多地捕获。正因为如此,你获得了比你预期更广泛的比赛。

一种解决方案是让您的*运营商&#34;懒惰&#34;添加?

/{(.*?)}/gi

更好的解决方案是使用匹配所有非}字符的字符类,而不是使用.匹配任何字符:

/{([^}]*)}/gi

答案 1 :(得分:0)

<div><input type="text" name="">{name}</div>
<div><input type="radio" name="{demo}" value="{yes}"></div>
<div><input type="radio" name="{demo}" value="{no}"></div>

var t = ["{name}":"Name","{yes}":Yes,"{no}":"No i didnt"]
$.each($('div'),function(k,v){
 var var s = $(v).html();
 var d = s.match(/{([^}]*)}/gi); 
 $(v).html(t[d]);
});

值不会改变