Regex剥离具有特定属性的html标记

Regex to strip html tag with certain attribute

本文关键字:属性 html 标记 剥离 Regex      更新时间:2023-09-26

我有一些无效嵌套的HTML,比如:

    <form class="form1" method="get">
    <div>
        <input name="field1">
    </form>
    <form class="form2" method="get">
        <input name="field1">
    </form>
</div>

是的,一团糟,别问。无效的嵌套正在其他地方引发问题。我认为jQuery正在期待一个结束的</div>,但只在最后一个找到它。然后,它将第二个<form>标签视为无效,并丢弃其正上方的闭合</form>,并假设第1行和第9行之间的所有内容都是一种形式

如果我将这些输出到控制台:

  • $('.form1).html()-所有线路1-9
  • $('.form2).html()-未定义

因此,我要做的是将整个事情视为一个字符串,并使用regex去掉form2。我期待一个类似于的正则表达式

formText.replace(/(<form'b[^>]*>)[^<>]*(<'/form>)/gi, "");

但我不知道如何用CCD_ 6引用具体的形式
它也是一个多行字符串的问题。

更新:添加了更多细节,概述了jQuery的remove()方法不起作用的原因。不幸的是,jQuery只认为有一个表单。

不要使用正则表达式解析HTML。既然您使用的是jQuery,只需使用.remove():

$(function() {
    $(".form2").remove();
});

JSFiddle

我最终使用了:

formText = formText.replace(/(<form'b[^>]*form2+.*>['s'S]+<'/form>)/gi, "");

['s'S]匹配包括'n'r在内的所有字符以覆盖换行符。

我本可以让正则表达式中处理类名的部分更具体,这样我就知道它是类,而不是其他类似的随机形式,但在实践中这并不重要(第二种形式只有一个实例,具有非常具体的类名)。