使用正则表达式忽略标签和JavaScript

时间:2019-04-16 10:57:43

标签: regex

我正在尝试在下面的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 &ldquo;SBJ Diversity and Inclusion&rdquo; 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>

编辑:

模式是由用户的查询生成的,因此模式可能包含单词windowplayer,当我将模式更改为包含\b时,它们会在javascript中匹配像这样:(?<!<[^>]*)\b(window|player|and)\b

Another example

2 个答案:

答案 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做我想做的事情。