如何在两个令牌之间获取文本

时间:2017-03-28 17:52:49

标签: regex

我有一个HTML文档,我们使用第三方应用程序生成。我们遇到的问题是它为HTML元素中的样式创建了覆盖。因此,我们最终得到的结构与此类似:

<p class="text ParaOverride-1">Hey</p>
<p class="text ParaOverride-2">now</p>
<p class="text ParaOverride-3">brown</p>
<p class="text ParaOverride-4">cow</p>
<p class="text ParaOverride-5">milk.</p>

我想要这两点之间的所有文本 - 以便我可以随后用空格替换它们以获得以下输出:

<p class="text">Hey</p>
<p class="text">now</p>
<p class="text">brown</p>
<p class="text">cow</p>
<p class="text">milk.</p>

起始标记是p class =“,结束标记将是p元素开头部分的结束。

2 个答案:

答案 0 :(得分:2)

vi下,替换内容如下所示:

:%s/<p class="text \([^"]*\)"/<p class="text

答案 1 :(得分:1)

这将完成任务

&#13;
&#13;
var a=document.body.innerHTML;
document.body.innerHTML=a.replace(/\s[a-zA-Z]+\-\d/g,'');
&#13;
<body>
<p class="text ParaOverride-1">Hey</p>
<p class="text ParaOverride-2">now</p>
<p class="text ParaOverride-3">brown</p>
<p class="text ParaOverride-4">cow</p>
<p class="text ParaOverride-5">milk.</p>
<p class="text ParaOverride-1">Hey</p>
</body>
&#13;
&#13;
&#13;

但使用正则表达式解析HTML是一种糟糕的方法。

所以,另一种方法是

您要删除text以外的其他类。

因此,迭代元素并删除另一个类。

检查以下内容

&#13;
&#13;
document.querySelectorAll('p').forEach( (x,i) => x.classList.remove("ParaOverride-"+(i+1)));
console.log(document.body.innerHTML);
&#13;
<body>
<p class="text ParaOverride-1">Hey</p>
<p class="text ParaOverride-2">now</p>
<p class="text ParaOverride-3">brown</p>
<p class="text ParaOverride-4">cow</p>
<p class="text ParaOverride-5">milk.</p>
<p class="text ParaOverride-1">Hey</p>
</body>
&#13;
&#13;
&#13;