正则表达式-检查文本区域中是否包含匹配项

本文关键字:是否 包含匹 区域 检查 文本 正则表达式 | 更新日期: 2023-09-27 18:08:11

好的,所以我昨天打开了这个问题,并很快得到了答案。至少我是这么想的,所以我把它标记为正确答案。

然而,我认为我没有很好地解释情况。基本上,我在呈现HTML之前得到它,解析它并搜索与模式[tag|text x]匹配的字符串,其中x是一个数字,两个单词不区分大小写。

但是,正如前面的问题所述,如果这些标签位于文本区域内,我不希望替换它们。这意味着,如果它们位于</textarea><textarea...>之间,那么我仍然希望替换它们,但如果它们位于<textarea...></textarea>之间,那么我不想替换它们。

目前我有

@"(?<!'<textarea class='tag''>)'[(tag|text) ([0-9]+)']"

我试过了

@"(?<!'<textarea.[^>]*'>)'[(tag|text) ([0-9]+)']"

但这似乎也不起作用。

例如,我想替换以下文本区域以外的任何标签:

[tag 1]
<textarea>[tag 2]</textarea>[tag 3]
<textarea class="bob">Walter [tag 4]</textarea>[tag 5]
<textarea attr-1="fred">Jim [tag 6] Mary</textarea>[tag 7]
[tag 8]

在这个例子中,只有标签1、3、5、7和8应该被替换;2、4和6不应该。

有没有人知道我应该如何改变它,以实现这一点?我不是要求任何人为我做所有的工作,然后给我答案——我是来学习的。我已经为此挣扎了几个小时了,所以任何帮助都会很棒的!

正则表达式-检查文本区域中是否包含匹配项

这种事情通常使用向前查找比向后查找更容易完成。这可以按您的要求工作:

@"'[(tag|text)'s+('d+)'](?![^<]*(?:<(?!/?textarea'b)[^<]*)*</textarea>)"
这里的想法是寻找</textarea>标签,但前提是不首先遇到<textarea...>标签—这是这一部分:
[^<]*(?:<(?!/?textarea'b)[^<]*)*</textarea>

假设HTML格式良好,该正则表达式只能在textarea元素内匹配。在

匹配[tag]之后执行负向前看,会导致文本区域中的匹配被拒绝。