正则表达式用于删除具有特定属性的html标记

时间:2016-05-12 16:49:15

标签: javascript jquery regex

我有一些无效嵌套的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() - undefined

所以我要做的是将整个事物视为字符串,并使用正则表达式去除form2。我期待一个正则表达式:

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

但我不确定如何使用class=form2引用特定表单 它也是一个多行字符串的问题。

更新:添加了更多细节,概述了为什么jQuery的remove()方法不起作用。不幸的是,jQuery只认为有一种形式。

2 个答案:

答案 0 :(得分:2)

Don't use regex to parse HTML.由于您使用的是jQuery,只需使用.remove()

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

JSFiddle

答案 1 :(得分:0)

我最终使用了:

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

[\s\S]匹配所有字符,包括\n\r,以涵盖换行符。

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