正则表达式-如果内部HTML标签存在,则不匹配

时间:2018-07-08 06:11:37

标签: javascript regex regex-lookarounds

我整理了一个正则表达式(见下文),仅在不存在内部html标记的情况下才遇到匹配问题

示例:

<b>asdf</b> <=这应该匹配

<b>asdf<i>asdf</i></b> <=这不应该匹配

<b>asdf<i></b> <=这不应该匹配

我的正则表达式/<([b])>(.+?)</([b])>/g 请查看此link

有人可以向我指出正确的方向,以确保如果有内部HTML标记,则正则表达式不匹配?

2 个答案:

答案 0 :(得分:0)

对于您发布的示例,第一个问题是/具有特殊含义(正则表达式边界),需要转义。然后,如果我理解正确,那么您想将<b>标签与仅内部文本匹配。一种基本方法是使用<丢弃任何内容:

 /<(b)>([^<]+)<\/(b)>/

(旁注:b不必在[]内;除非要分组,括号也可以被删除,导致:/<b>[^<]+<\/b>/

现在,我们通常避免使用正则表达式来解析/分割HTML,这是对RegEx match open tags except XHTML self-contained tags的一个很好的回答。

在javascript中,有很多方法可以只保留文本而不使用正则表达式。有关示例,请参见Strip HTML from Text JavaScript

答案 1 :(得分:0)

如果必须为此使用正则表达式,则可以大大简化您的表达式:匹配<b>,后跟除开括号外的所有内容,再跟</b>

const re = /<b>[^<]+<\/b>/;
const str = `Aenean lacinia bibendum <a href="/life">life</a> sed consectetur. <a href="/work">Work</a> quis risus eget urna mollis ornare <a href="/about">about</a> leo. <a><asdf>asdf</asdf></a> <a>asdf</a>

This should not match:
<b><i>asdf</i></b>

This should match:
<b>asdf</b>`;
console.log(str.match(re));