【发布时间】:2013-05-09 16:16:20
【问题描述】:
我知道我的问题可能看起来像 this question 的重复,但它不是
我正在尝试使用 JavsScript RegExp 将来自服务器的 html text 中的类名作为模板匹配,并将其替换为另一个类名。
这是代码的样子:
<div class='a b c d'></div>
<!-- or -->
<div class="a b c d"></div>
<!-- There might be spaces after and before the = (the equal sign) -->
例如,我想匹配“b”类
以尽可能高的性能
这是我使用的正则表达式,但并非在所有情况下都有效,我不知道为什么:
var key = 'b';
statRegex = new RegExp('(<[\w+ class="[\\w\\s]*?)\\b('+key+')\\b([\\w\\s]*")');
html.replace( statRegex,'SomeOtherClass');// I may be mistake by the way I am replacing it here
【问题讨论】:
-
我知道它并不比 dom 操作快,但我从服务器而不是 dom 获取文本,并且我正在使用特殊框架
-
将 HTML 转换为 DOM 元素很容易 ;-)
-
@AymanJitan 你不知道 HTML 不是正则的,因此不适合正则表达式。见htmlparsing.com/regexes.html。使用 DOM 显然是最好的方法。
-
@Bart 我有小部件,每个小部件由许多html模板组成,每个小部件内部都有不同状态的组件,状态由css类控制,我需要解析html并显示处于不同状态的组件和小部件。虽然很难解释。我知道 dom 快得多,但在我的情况下它不起作用
-
@AymanJitan 我可以想象这很复杂,但你错过了我想要表达的观点。这与速度无关。这是关于在现在和将来获得正确的结果。当 HTML 的格式发生变化时,正则表达式很可能会失败,因为 DOM 会为您提供可靠的结果。
标签: javascript regex performance