javascript RegEx - 获取所有html标签总数的计数

时间:2013-01-18 16:09:55

标签: javascript regex html-parsing html-parser

我正在尝试获取所有匹配HTML字符的计数(长度),包括开放(<tag>)和结束(</tag>),包括任何attributes

考虑以下HTML:

<div>
    <a href="#">link</a>
    <span>some text</span>
</div>

HTML字符长度计数 40 (因为它计算<div><a href="#"></a><span></span></div>

This is the working regExp (on gskinner.com)

但是在javascript中使用它时会出现错误 见jsfiddle

2 个答案:

答案 0 :(得分:3)

错误的原因是你的正则表达式包含一个正面的后视(?<=\s) - 一个正则表达式的Javascript实现不提供的功能(参见Mimicking Lookbehinds in Javascript)。 (更准确地说,错误是由未转义的?之后的(导致的,而未跟!=:等。)

您提供给工作示例的链接是一个用ActionScript 3编写的Flex应用程序,它确实包含正面的lookbehinds。

您还需要将g标记添加到正则表达式文字的末尾,以获取来自match的所有匹配项的数组,然后您可以将它们的长度相加。

以下是一个工作示例,其中删除了正面lookbehind并添加了g标记:jsfiddle

它显示163的长度看起来是正确的,但我会把计数留给你 您可能需要添加一些代替lookbehind或以其他方式编辑正则表达式 - 我也会让您继续工作。

答案 1 :(得分:1)

语法错误。

你必须逃避正斜杠/,因为它也是你的分隔符。

/(<(?:[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)\s*=)(?!\s*\/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+|\/?[A-Za-z_:][\w:.-]*\s*\/?)>)/