Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regex search&;对于表达式的每次出现,用不同的内容替换表达式_Javascript_Regex - Fatal编程技术网

Javascript Regex search&;对于表达式的每次出现,用不同的内容替换表达式

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>

我使用的是供应商提供的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> <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输出的代码-现在我有一个完全不同的问题-但至少他们的代码现在更有意义了。