每个 HTML div 需要项目

Each HTML div Requires item

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}']

/{(.*)}/gi

在您的正则表达式中,* 量词默认为 "greedy"。这意味着它将尝试尽可能多地捕获。因此,您获得的匹配范围比您预期的要广。

一个解决方案是通过添加 ?:

让您的 * 运算符 "lazy"

/{(.*?)}/gi

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

的字符

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

<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]);
});

值不变