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}']
答案 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]);
});
值不会改变