与HTML标签反向匹配

使用NodeJS ,我有以下正则expression式: /<[^>]*>/g匹配HTML标签:( 现场演示 ) 在这里输入图像说明

我想反转比赛,所以它会捕捉文字,我已经尝试了负向前瞻的方法,没有运气。

编辑我避免拆分方法,因为我需要匹配的索引

JS有可能吗?

JS有可能吗?

不,HTML可以任意嵌套,这意味着您需要recursion以便使用正则expression式来使用它 – JavaScript正则expression式没有的东西。

假设你可以抛弃JS并使用一种支持PCRE的语言,这个由Cthulhu正则expression式编写的怪异字符 就会发挥作用 ( 强制性的regex101链接 )(注意它不涉及CDATA):

 <!--[\s\S]*?-->|<([az]+)(?:\s\S+?=(["']|)[\s\S]*?\2)*>((?:[\s\S]*?(?R)?)*)<\/\1> 

这是如何工作的:

  • <!--[\s\S]*?-->| 是为了防止评论造成误报
  • <([az]+)(?:\s\S+?=(["']|)[\s\S]*?\2)*>是开始标记,
    • ([az]+)是标记名称(注意捕获组 – 我们将在结束标记中使用它)
    • (?:\s\S+?=(["']|)[\s\S]*?\2)*是属性,其中
      • \s是将标签名称和属性相互分开的空白字符
      • \S+?=是后跟等号的属性名称(注意惰性量词 – 我们需要它,因为\S包含=
      • (["']|)[\s\S]*?\2是可以用双引号,单引号括起来的值
  • ((?:[\s\S]*?(?R)?)*)是标签之间的文本(请注意捕获组 – 它正是您所需要的,并将以组3的forms出现 ),其中(?R)? 使正则expression式能够处理嵌套的构造
  • <\/\1>是结束标签,其中\1是标签名称(记住开始标签中的捕获组)

由于给定的答案没有给出任何解决scheme,所以你可以使用下面的代码为简单的[x] html没有嵌套标签。 否则,完整的解决scheme使用HTMLparsing器。

 var str = "Lorem ipsum <pre class='a1'>text 1</pre> Lorem ipsum <a href='http://google.com'>text 2</a>"; str.replace(/<(\w+).*>(.*?)<\/\1>/g, function(match, g1, g2) { console.log(g2); }); 
Interesting Posts