正则表达式文本和标签之间的一些标签

Regex text and some tags between tag

我的正则表达式标签有问题 html。任何人都请帮助我! 谢谢,这是我的一个案例...我搜索并思考但没有去做。

案例一

// My input to regex
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit <br/><a href="#"><img src="img.jpg/></a> sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua<p>

// Out Put after regex    
Lorem ipsum dolor sit amet, consectetur adipisicing elit <br/><a href="#"><img src="img.jpg/></a> sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua

案例二

// My input to regex
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

// Out put after regex            
Lorem ipsum dolor sit amet, consectetur adipisicing elit

案例三

// My input to regex

<p><ul>...</ul><p>

//Out put after regex

NULL

我猜这就是您想要的(javascript 中的示例)。

function checkParagraph(str)
{
    var result = str.match(/^<p>([^<].*[^>])<\/p>$/i);
    if (result) return result[1];
    else return null;
}

alert(checkParagraph("<p>Lorem ipsum <br/><a href=\"#\"><img src=\"img.jpg\"/></a> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum magna aliqua</p>"));
alert(checkParagraph("<p><a href=\"#\"><img src=\"img.jpg\"/></a></p>"));

关于仅允许 BR、IMG、A 和 IMG-inside-A 标签的附加信息,正则表达式完全不同:

function checkParagraph(str)
{
    var result = str.match(/^<p>(([^<>]+|<br\/>|<img[^>]+>|<a[^>]+>[^<>]*<\/a>|<a[^>]+><img[^>]+><\/a>)*)<\/p>$/i);
    if (result) return result[1];
    else return null;
}

alert(checkParagraph("Lorem ipsum magna aliqua"));
alert(checkParagraph("<p>Lorem ipsum magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <br/> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <a href=\"#\">magna</a> aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <img src=\"img.jpg\"/> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <br/><a href=\"#\"><img src=\"img.jpg\"/></a> magna aliqua</p>"));
alert(checkParagraph("<p><br/><a href=\"#\"><img src=\"img.jpg\"/></a></p>"));
alert(checkParagraph("<p><span>magna</span> aliqua</p>"));
alert(checkParagraph("<p><a href=\"#\"><span>magna</span> aliqua</a></p>"));
alert(checkParagraph("<p><br/><a href=\"#\"><img src=\"img.jpg\"/><span>magna</span> aliqua</a></p>"));

正则表达式分解:

/.../i -> 大小写标签不区分大小写
^<p>...<\/p>$ -> 输入包含在 P 标签中
(...) -> 括号之间的捕获组将变为 result[1]
(...|...)* -> 以下任意数量的选项:
[^<>]+ -> 选项 1:任何不带标签的文本
<br\/> -> 选项 2:BR 标签
<img[^>]+> -> 选项 3:IMG 标签
<a[^>]+>[^<>]*<\/a> -> 选项 4:一个带有文本的 A 标签
<a[^>]+><img[^>]+><\/a> -> 选项 5:A 标签内含 IMG 标签