【问题标题】:Match everything inside body tags with regex and javascript使用正则表达式和 javascript 匹配正文标签内的所有内容
【发布时间】:2018-09-05 10:01:06
【问题描述】:

我想知道是否有人可以帮助我使用 javascript 上的正则表达式。

所以基本上我有以下电子邮件正文示例:

<body lang="FR" link="#0563C1" vlink="#954F72"><div class="WordSection1"><p style="margin:0cm;margin-bottom:.0001pt">Bonjour,<o:p></o:p></p></div></body>

而使用正则表达式我只需要获取body标签之间的内容,我该怎么做?

我之前试过这个(str是上面的html代码):str.match(/&lt;body\s[^&gt;]*&gt;(.*?)&lt;\/body&gt;/gi);

但是当我尝试使用 str[1] 获取组 1 时,我总是不确定,知道为什么吗?

重要提示:我在 ServiceNow 上执行此操作,我需要在服务器端解析 HTML,基本上我拥有的是字符串字段中的 HTML 代码。

【问题讨论】:

  • 你试过 str[0] 吗?可能是索引从 0 开始。
  • @Saifullahkhan 使用 str[0] 它返回整个字符串,以及正文标签。

标签: javascript html regex


【解决方案1】:

您可以使用DOMParser

var parser = new DOMParser();
var doc = parser.parseFromString(str, "text/html");
var body = doc.getElementsByTagName('body')[0].innerHTML;
console.log(body);

【讨论】:

  • 我认为我做不到,我忘了说一件可能相关的事情,我在 ServiceNow 上做这个,我需要在服务器端解析 HTML,基本上我have 是字符串字段中的 HTML 代码。
  • 使用您在服务器端拥有的任何 HTML 解析库。这是正确的解决方案。
【解决方案2】:

看这个问题How do you access the matched groups in a JavaScript regular expression?

这应该可以工作

var str = '<body lang="FR" link="#0563C1" vlink="#954F72"><div class="WordSection1"><p style="margin:0cm;margin-bottom:.0001pt">Bonjour,<o:p></o:p></p></div></body>'

var myregex = /<body\s[^>]*>(.*?)<\/body>/gi

var match = myregex.exec(str)

console.log(match[1])

【讨论】:

  • 它确实适用于那个例子,我已经在一个真实的案例中尝试过,我的字符串有很多更多的内容以及换行符,并且使用你的代码返回以下错误: 无法读取 null 的属性“1”。我也忘了说字符串不是以 标签开头的,它以 开头,而 在中间的某个地方,我只想获取 标签内的内容。跨度>
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 2010-09-22
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多