使用regex和javascript将锚点hrefs转换为唯一标记

使用regex和javascript将锚点hrefs转换为唯一标记,javascript,regex,Javascript,Regex,我有以下样本数据: <products_database> <product> <id>##1234 <a name ="toy">toy</a> <weight>5kg <a href ="#block">block</a> </product> <product> <id>

我有以下样本数据:

<products_database>
<product>
         <id>##1234
         <a name ="toy">toy</a>
         <weight>5kg
         <a href ="#block">block</a>
</product>
<product>
          <id>##56789
          <a name ="brick">brick</a>
          <a name ="lego">lego</a>
          <a name ="block">block</a>
          <weight>2kg
          <a href ="#toy">toy</a>
</product>
<product>
          <id>##1357902
          <a href ="#toy">toy</a>
          <a href ="#brick">brick</a>
          <weight>4kg
</product>
</product_database>

##1234
##56789
##1357902
4kg
我想将HREF转换为:

<products_database>
<product>
         <id>##1234
         <a name ="toy">toy</a>
         <weight>5kg
         <..pd ##56789 #block>block</a>
</product>
<product>
          <id>##56789
          <a name ="brick">brick</a>
          <a name ="lego">lego</a>
          <a name ="block">block</a>
          <weight>2kg
          <..pd ##1234 #toy>toy</a>
</product>
<product>
          <id>##1357902
          <..pd ##1234 #toy>toy</a>
          <..pd ##56789 #brick>brick</a>
          <weight>4kg
</product>

##1234
玩具
5公斤
块
##56789
砖
乐高
块
2kg
玩具
##1357902
玩具
砖
4kg

href将被转换成这个唯一的标记,在该标记中,它在每个单独的“产品”中获取“id”,其中它们的“a href”值等同于它们的“a name”。我只允许使用javascript和正则表达式。如果您能提供任何帮助,我将不胜感激。

我试图弄清楚您到底需要做什么,并编写了一个解决方案,可以满足您的需要

//var findProduct=/\s+(###\d+)\s+((?:”;
}).join(“\n”)+
product.links.map(函数(链接){
返回“块”;
}).join(“\n”)
+“\n”;
}).join(“\n”)+”;
document.getElementById(“数据”).value=data;

##1234
##56789
##1357902
4kg
或者您可以使用这种方法(主要是regex方法),但我不确定这种方法的抗错误性:

var a = '<products_database>\n<product>\n         <id>##1234\n         <a name ="toy">toy</a>\n         <weight>5kg\n         <a href ="#block">block</a>\n</product>\n<product>\n          <id>##56789\n          <a name ="brick">brick</a>\n          <a name ="lego">lego</a>\n          <a name ="block">block</a>\n          <weight>2kg\n          <a href ="#toy">toy</a>\n</product>\n<product>\n          <id>##1357902\n          <a href ="#toy">toy</a>\n          <a href ="#brick">brick</a>\n          <weight>4kg\n</product>\n</product_database>';

while (a.match(/(?:<id>(##\d+)((?:[\s\S](?!<id))*?<a name =")(.+?)("[\S\s]*?)<a href ="#\3">|<a href ="#(.+?)">([\S\s]*?)<id>(##\d+)((?:[\s\S](?!<id))*?<a name =")\1")/g) != null) {
  a = a.replace(/<id>(##\d+)((?:[\s\S](?!<id))*?<a name =")(.+?)("[\S\s]*?)<a href ="#\3">/g, '<id>$1$2$3$4<.. pd $1 #$3>').replace(/<a href ="#(.+?)">([\S\s]*?)<id>(##\d+)((?:[\s\S](?!<id))*?<a name =")\1"/gm, '<.. pd $3 #$1>$2<id>$3$4$1"');
}

a;
var a='\n\n##1234\n\n\n\n\n##56789\n\n\n\n##1357902\n\n\n 4kg\n\n';

while(a.match(/(?:(###\d+)(?:[\s\s](?!是的,我非常确定我的预期输出。到目前为止,我想尝试将a名称和id放入哈希,但我不熟悉语法。到目前为止,您是否编写了任何代码?如果您能告诉我们,我们可以帮助建议进一步开发的方法。两天前有两个人帮助了您,但没有感谢或任何其他评论:(