【问题标题】:how to regex the string between two tokens and return string without the tokens?如何正则表达式两个标记之间的字符串并返回没有标记的字符串?
【发布时间】:2013-02-16 22:45:50
【问题描述】:

正则表达式的斗争......

我正在使用它来查找某些元素之间的 HTML 字符串:

 for (i = 0; i < 2; i += 1) {
   target = block[i];   // like BODY or HEAD
   regex = RegExp('<' + target + '>(.)+</' + target + '>');
   // in case string passed includes breaks/spaces
   data = data.replace(/(\r\n|\n|\r)/gm,"").replace(/\s+/g," ")
             .match(regex);
   entry = data[0].replace(/<!-- [\s\S]*? -->/g, '');
   console.log(entry);
 }

虽然这可以正常工作,但它会返回如下内容:

<head>....everthing I want ....</head>

问题:
我需要如何修改正则表达式,以便我仍然可以指定我需要其内容的元素,但它只返回内容而不返回内容和令牌(如&lt;head&gt;&lt;/head&gt;)。

谢谢!

【问题讨论】:

  • 使用 Ambers 解决方案并移动括号以包含 + 像这样 '&lt;' + target + '&gt;(.+)&lt;/' + target + '&gt;'
  • $(target).each(function(){ console.log($(this).html()); })除了评论节点还有什么问题吗?
  • @FabrícioMatté:实际上没有。我有一些模板,其中 cmets ,但这个没有,所以也试试这个。
  • 当然,空格仍然必须用正则表达式折叠,注释节点可以用contents().filter() 或正则表达式删除,但是是的,我仍然不确定你想要实现什么。
  • @Fabricio:我正在开发一个插件,它可以引入 sn-ps 代码,我更喜欢它是 sn-ps,但它是(未压缩的)HTML 页面(想想一个页面有一个按钮)。我必须提取要使用的 sn-p 页面的点点滴滴,因为我无法按原样附加完整的 sn-p。因此,我创建了正则表达式来过滤脚本/css,我将其附加到页面头部,以及正文中的内容(例如,独奏按钮),进入页面。我用 Ambers 的回答解决了这个问题,所以我是一个快乐的露营者。谢谢!

标签: javascript jquery regex string token


【解决方案1】:

使用第一个匹配组而不是整个匹配。

regex = RegExp('<' + target + '>(.+)</' + target + '>');

然后……

entry = data[1].replace(/<!-- [\s\S]*? -->/g, '');

【讨论】:

  • 请注意细微的修改 - 您需要 (.+)(一组匹配的重复字符)而不是 (.)+(重复匹配组,每组一个字符)。
  • 不错!我看着我的[1] 返回&gt; 想知道该怎么做 :-) 非常感谢!
猜你喜欢
  • 2020-07-29
  • 1970-01-01
  • 2017-12-20
  • 2016-07-03
  • 2019-11-19
  • 1970-01-01
  • 2015-05-13
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多