如何用js替换html中特定属性中的括号?

时间:2017-10-29 01:31:41

标签: javascript jquery html regex

我有这个HTML代码:

<div>
    <a href="TOTO/{{CODE}}/TOTO/{{CLICK}}/{{OPEN}}" data-href="TOTO/{{CODE}}/TOTO/{{CLICK}}/{{OPEN}}">FOO1</a>
</div>
<div>
    <a href="{{CODE}}/{{CLICK}}/BAR" data-href="{{CODE}}/{{CLICK}}/BAR">FOO2</a>
</div>

我想通过%% OPEN %%将{{CODE}}更改为%% CODE %%和{{CLICK}}更改为%% CLICK %%和{{OPEN}},但仅限于属性所有div中的data-href。

我不知道如何只定位data-href。 我试着在data-href属性中定位括号:

/data-href="([^"]+)({{([^\"]*)}}+)([^"]+)"/g

但它不起作用!

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用简单的正则表达式匹配data-href内的任何内容。一个简单的正则表达式可以是这样的

data-href=".*?"

然后,您可以用一个循环替换所有匹配

var str = '<div><a href="TOTO/{{CODE}}/TOTO/{{CLICK}}/{{OPEN}}" data-href="TOTO/{{CODE}}/TOTO/{{CLICK}}/{{OPEN}}">FOO1</a></div><div><a href="{{CODE}}/{{CLICK}}/BAR" data-href="{{CODE}}/{{CLICK}}/BAR">FOO2</a></div>';
var myRegexp = /data-href=".*?"/g;
var match = myRegexp.exec(str);
while (match != null) {
  str = str.replace(match[0], match[0].replace(/{{|}}/g, '%%'));
  match = myRegexp.exec(str);
}
console.log(str)