我正在尝试获取所有匹配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
答案 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*\/?)>)/