我整理了一个正则表达式(见下文),仅在不存在内部html标记的情况下才遇到匹配问题
示例:
<b>asdf</b>
<=这应该匹配
<b>asdf<i>asdf</i></b>
<=这不应该匹配
<b>asdf<i></b>
<=这不应该匹配
我的正则表达式:/<([b])>(.+?)</([b])>/g
请查看此link
有人可以向我指出正确的方向,以确保如果有内部HTML标记,则正则表达式不匹配?
答案 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));