用于从字符串中删除给定(x)HTML标记的正则表达式

Ele*_*hoy 6 html regex string

假设我有一个包含大量文本和(x)HTML标记的字符串.我想删除给定标记的所有实例(以及该标记的任何属性),保留所有其他标记和文本.完成这项工作的最佳正则表达方式是什么?

编辑添加:哦,我很欣赏使用正则表达式来解决这个问题并不是最好的解决方案.但是,为了便于讨论,我们可以假设这个特定的技术决策比我的工资等级高出一些水平吗?;)

Dan*_*Dan 17

尝试使用正则表达式解析HTML通常是一个非常糟糕的主意.使用解析器,应该有一个可用于您选择的语言.

可能能够逃脱这样的事情:

</?tag[^>]*?>
Run Code Online (Sandbox Code Playgroud)

但这取决于你究竟在做什么.例如,这不会删除标记的内容,并且可能会使HTML处于无效状态,具体取决于您尝试删除的标记.它也很好地应对无效的HTML(并且有很多关于HTML).

改为使用解析器:)


Pre*_*aul 15

我认为这里发生了一些严重的反正则表达偏见.很多时候,如果使用完整的解析器没有意义,可能需要从某个标记中剥离特定标记.

当然有时候解析器可能是最好的选择,但如果你正在寻找一个正则表达式,那么:

<script[^>]*?>[\s\S]*?<\/script>
Run Code Online (Sandbox Code Playgroud)

这将删除脚本标记及其内容.确保使用不区分大小写的匹配.

如果您不想删除标记的内容,则可以使用:

<\/?script[^>]*?>
Run Code Online (Sandbox Code Playgroud)

在javascript中使用的一个例子是:

function stripScripts(markup) {
  return markup.replace(/<script[^>]*?>[\s\S]*?<\/script>/gi, '');
}

var safeText = stripScripts(textarea.value);
Run Code Online (Sandbox Code Playgroud)