【问题标题】:javascript RegExp - get count of all html tags total charactersjavascript RegExp - 获取所有 html 标签的总字符数
【发布时间】:2013-01-02 09:33:28
【问题描述】:

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

考虑以下 HTML:

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

HTML 字符长度计数将为 40 (因为它计数&lt;div&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;

This is the working regExp (on gskinner.com)

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

【问题讨论】:

  • 请问,为什么?我只是想知道它用于什么功能......通常这类问题有一个更好的非正则表达式解决方案
  • 你说得对,我正在开发一个截断插件,并试图减去 HTML 标记 char 以获得正确的最大长度 char

标签: javascript regex html-parsing html-parser


【解决方案1】:

语法错误。

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

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

【讨论】:

  • 谢谢!你能分叉小提琴吗?
  • 我更新了jsfiddle 还是不行!
  • @Cyborgx37 使用 Javascript Regexp 不支持的后向规则?你确定吗?
  • @inhan - 啊,没注意到。未转义的正斜杠引起了我的注意。
【解决方案2】:

错误的原因是您的正则表达式包含一个正则表达式(?&lt;=\s) - 正则表达式的Javascript 实现不提供的功能(请参阅Mimicking Lookbehinds in Javascript)。 (更准确地说,错误是由未转义的(之后的?引起的,而不是!=:等)

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

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

这是一个有效的示例,其中删除了正向后视并添加了 g 标志:jsfiddle

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2023-03-13
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多