1

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

考虑以下 HTML:

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

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

这是有效的正则表达式(在 gskinner.com 上)

但是在javascript中使用它时会出现错误
请参阅jsfiddle

4

2 回答 2

3

错误的原因是您的正则表达式包含一个积极的lookbehind (?<=\s)- 正则表达式的 Javascript 实现不提供的功能(请参阅Mimicking Lookbehinds in Javascript)。(更准确地说,错误是由?以下未转义的(,当不跟随时!=等等引起的:

您提供的一个工作示例的链接是一个用 ActionScript 3 编写的 Flex 应用程序,其中确实包含积极的后视。

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

这是一个工作示例,删除了积极的后视并g添加了标志:jsfiddle

它显示了一个看起来正确的长度163,但我将把计数留给你。
您可能需要添加一些东西来代替后视或以其他方式编辑正则表达式 - 我也会让您解决这个问题。

于 2013-01-19T10:18:04.457 回答
1

存在语法错误。

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

/(<(?:[A-Za-z_:][\w:.-]*(?=\s)(?!(?:[^>"\']|"[^"]*"|\'[^\']*\')*?(?<=\s)\s*=)(?!\s*\/?>)\s+(?:".*?"|\'.*?\'|[^>]*?)+|\/?[A-Za-z_:][\w:.-]*\s*\/?)>)/
于 2013-01-18T16:11:35.797 回答