Javascript Regex search&;对于表达式的每次出现,用不同的内容替换表达式
我使用的是供应商提供的API,该API使用javascript输出HTML,基本上如下所示:Javascript Regex search&;对于表达式的每次出现,用不同的内容替换表达式,javascript,regex,Javascript,Regex,我使用的是供应商提供的API,该API使用javascript输出HTML,基本上如下所示: <li class="parent_class"> <a href="link1.html"> Parent Name </a> </li> <div class="child_class"> <li> <a href="link2.html"> Child Name 1 </a> </li>
<li class="parent_class"> <a href="link1.html"> Parent Name </a> </li>
<div class="child_class">
<li> <a href="link2.html"> Child Name 1 </a> </li>
<li> <a href="link3.html"> Child Name 2 </a> </li>
</div>
<li class="parent_class"> <a href="link4.html"> Parent Name 2</a> </li>
<div class="child_class">
<li> <a href="link5.html"> Child Name 1 </a> </li>
<li> <a href="link6.html"> Child Name 2 </a> </li>
</div>
等等。这就是我想要的代码:
<li class="parent_class"> <a href="link1.html"> Parent Name </a>
<ul id="xc">
<li> <a href="link2.html"> Child Name 1 </a> </li>
<li> <a href="link3.html"> Child Name 2 </a> </li>
</ul> </li>
<li class="parent_class"> <a href="link4.html"> Parent Name 2</a> </li>
<ul id="1">
<li> <a href="link5.html"> Child Name 1 </a> </li>
<li> <a href="link6.html"> Child Name 2 </a> </li>
</ul></li>
(以防万一:我将在API调用之前放置一个
标记,在它之后放置一个
标记以关闭整个列表。)
通过使用更多的javascript,我已经知道了如何使用正则表达式替换将
替换为
,但我不确定如何将
标记替换为
标记,因为每次都需要不同的标记。第一个
必须是
(由于我无法控制更多的代码)。另一个
必须各有一个ID,但这些ID可以随机生成
我有一个模糊的想法,我可以使用exec方法创建一个包含
所有实例的数组,将数组[0]设置为
,然后将数组[1]设置为
,将数组[2]设置为
等等,但我不确定这是否是一个好主意(或者具体如何做)
提前谢谢 使用DOM解析器,它非常适合HTML等标记语言,而不是正则表达式
您可以使用.getElementsByTagName和.getAttribute获取所需的分区,并设置要创建的属性、createElement和appendChild。假设您接收的HTML是字符串(而不是文档),则可以使用以下函数对其进行转换:
function mogrify (input) {
// 1) replace </li><div> with <ul>
var i = 0;
var out = input.replace(/<\/li>\s*<div[^>]*>/g, function () {
var listID = i == 0
? "xc"
: "xc_" + (Math.floor(Math.random() * 1e9) + 1);
++i;
return '<ul class="' + listID + '">';
});
// 2) replace </div> with </ul></li>, like you described:
return out.replace(/<\/div>/g, "</ul></li>");
}
function mogrify(输入){
//1)用
var i=0;
var out=input.replace(/\s*]*>/g,函数(){
var listID=i==0
?“xc”
:“xc_389;”+(Math.floor(Math.random()*1e9)+1);
++一,;
返回“”;
});
//2)替换为
,如您所述:
返回。替换(//g,“
”);
}
请注意,输入HTML在语法上是无效的,使用空数字作为ID属性也是无效的。谢谢!不幸的是,我不能使用它,因为供应商更改了API输出的代码-现在我有一个完全不同的问题-但至少他们的代码现在更有意义了。