返回指定字符串周围的html标签的正则表达式模式[重复]

Posted

技术标签:

【中文标题】返回指定字符串周围的html标签的正则表达式模式[重复]【英文标题】:Reqex pattern that returns html tags around specified string [duplicate] 【发布时间】:2019-03-22 01:19:34 【问题描述】:

我一直在尝试制作正则表达式模式,它将返回带有剃刀内特定字符串序列的最内部 html 标记。请注意,我对正则表达式不是很有经验。

让我们有基本的cshtml结构,输入到Regex.Match

@
    <div id="Base">
        <div id="MainDiv">
            <span id="HeaderSpan">
                Header
            </span>

            TestText1
        </div>
        @
             var innerRazorVariable = "test"
         
    </div>

    var razorVariable = "test";

如果“Header”是 SpecifiedString,我正在寻找将返回此字符串的模式

<span id="HeaderSpan">
    Header
</span>

我已经设法编写了模式,该模式将返回包含指定字符串的大多数内部剃须刀的内容

Regex.Match(source, "@.*(@.*?" + SpecifiedString + ".*?)|.*");

效果很好。如果Match 包含group,那么group 是最内在的剃刀声明及其内容。如果不是MatchValue 是最内在的剃须刀及其内容。

问题在于最内部的 html 标签。我试图让它与 Razor Regex 类似,但没有成功。我得到的最接近的是

(<.*?>).*SpecifiedString .*(<\/.*?>)

Online Regex

我知道为什么它没有按我的意愿工作,但我不知道我应该改变什么。

我尝试的第二个解决方案是

(?'html'<.*?>)|(SpecifiedString)

Online Regex

然后我试图用 foreach 在组和捕获上找到最内部的 html 标记,但我无法让它工作,所以我放弃了它。

编辑。

附加信息。如果指定文本不在任何 html 标记中,则正则表达式不应返回任何内容。我正在尝试找出指定的字符串是 razor 中的 html 还是 c# 代码。

我的问题。

是否有可能编写这样的正则表达式模式,如果可以,如何?

【问题讨论】:

“如果指定文本不在任何 html 标签中”?它总是在 标签内。 是的,但是Regex.Match 的输入只是剃须刀的内容,就像示例中一样。 【参考方案1】:

Don't use Regex to handle HTML tags

但我认为您可以使用更好的正则表达式:

<[^>]+>\s*Header\s*<[^>]+>

Regex Demo

解释:

<[^>]+>    start with '<' followed by non-'>' characters and end with '>'
\s*        zero or many of whitespace characters

注意:在正则表达式中使用.* 非常普遍,当您可以进行更多规范时不要忽略它。

【讨论】:

我也想了很多,但是很多时候都行不通。您介意解释一下为什么会这样吗? @ThomasWeller 我添加了更多信息以使其更有意义,但请注意标签始终以 &lt; 开头,后跟除 &gt; 之外的任何其他字符,然后以 &gt; -HTH 结尾; )。 这很好用,但我无法描述另一种情况。我已经进行了有问题的编辑。 人们对 HTML 的了解不够。正则表达式不适用于有效的 HTML 案例:regex101.com/r/A3bHxF/1 @ThomasWeller ***.com/q/1732348/4519059

以上是关于返回指定字符串周围的html标签的正则表达式模式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 邮箱验证 - 正则验证

Nginx中if语句中的判断条件

JS正则[egExp]小记

删除正则表达式中的 Html 标签 [重复]

正则表达式排除特定字符串

js使用正则表达式将字符串里面的img标签src的值提取出来