好的,所以我昨天打开了this question并很快得到了答案。它有用,或者我认为,所以我把它标记为正确的答案。
但我认为我没有很好地解释这种情况。基本上我在渲染之前正确地获取HTML,解析它并搜索匹配模式[tag|text x]
的字符串,其中x是一个数字,两个单词不区分大小写。
但是,如前一个问题所述,如果这些标签位于textarea内,我不想替换这些标签。这意味着,如果它们介于</textarea>
和<textarea...>
之间,那么我仍然希望替换它们,但如果它们介于<textarea...>
和</textarea>
之间,那么我不会喜欢替换它们。
到目前为止我已经
了@"(?<!\<textarea class='tag'\>)\[(tag|text) ([0-9]+)\]"
我试过了
@"(?<!\<textarea.[^>]*\>)\[(tag|text) ([0-9]+)\]"
但这似乎也不起作用。
例如,我想在以下内容中替换textareas之外的任何标签:
[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。
有没有人知道我应该如何改变它以实现这一目标?我不是要求任何人为我做所有工作并给我答案 - 我在这里学习。我已经在这几个小时内努力了,所以对此的任何帮助都会很棒!
答案 0 :(得分:2)
对于前瞻者而言,这种事情通常比看起来更容易。这可以按照您的要求运行:
@"\[(tag|text)\s+(\d+)\](?![^<]*(?:<(?!/?textarea\b)[^<]*)*</textarea>)"
这里的想法是寻找</textarea>
代码,但前提是不首先遇到<textarea...>
代码 - 这就是这一部分:
[^<]*(?:<(?!/?textarea\b)[^<]*)*</textarea>
假设HTML格式正确,那么正则表达式只能匹配textarea元素。将其置于 [tag]
之后执行的否定预测会导致textareas中的匹配被拒绝。