我正在尝试在下面的HTML上执行正则表达式替换。我使用的是一个现有的(我没有写过,也不太真正理解的)正则表达式模式,该模式忽略了HTML标记内的任何内容,但我需要它也忽略脚本标记之间的任何内容。模式为(?<!<[^>]*)(diversity|and|inclusion)
。问题是JavaScript中'playerBrandingId'
中的和被匹配并最终被替换。万一重要,我正在使用C#。 You can see what I get here.
<p>When it comes to building more diverse and inclusive workforces, the sports industry is already a leader, but it can do much more. One of the ways SBD/SBJ is focusing on diversity and inclusion is by talking to business leaders about what the industry can do better. In our first video in the “SBJ Diversity and Inclusion” series, we hear from execs working in leagues, technology, recruitment and academia.</p>
<div class="article-offset-block article-video article-offset-block--half">
<div class="u-vr2">
<div id='video-F17F523A70EB43ECAF54DF46144835B4'></div>
</div>
</div>
<script>
var playerParam = {
'pcode': 'poeXI63BtIsR_ugBoy3Z6X8KfiMo',
'playerBrandingId': 'video-F17F523A70EB43ECAF54DF46144835B4',
'autoplay': false,
'loop': false
};
OO.ready(function () { window.ppF17F523A70EB43ECAF54DF46144835B4 = OO.Player.create('video-F17F523A70EB43ECAF54DF46144835B4', 'w5cW9qZTE6qRRDqfBdi861XWJTXci9uE', playerParam); });
</script>
编辑:
模式是由用户的查询生成的,因此模式可能包含单词window
或player
,当我将模式更改为包含\b
时,它们会在javascript中匹配像这样:(?<!<[^>]*)\b(window|player|and)\b
答案 0 :(得分:1)
将您的正则表达式更改为(?<!<[^>]*)\b(diversity|and|inclusion)\b
\b
添加了一个单词边界测试。强制(
和)
中的每个单词都是完整单词。
编辑: 您正在尝试解析HTML以提取文本节点,然后检查它们, 除非您希望调用rite 666 Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn。否则,您在任何情况下都不应尝试使用正则表达式解析HTML。
使用HTML解析库,请参见this page,了解某些方法或使用.NET和C#从HTML中提取提取文本节点
答案 1 :(得分:0)
答案是,根据this,您无法使用Regex做我想做的事情。