1

我想知道如果我想在一个 html 文件中获取所有类名,我regex可以使用什么?我不明白我可以安装它的方式。我有这个代码:

HTML

<html>
    <div class="myFirstClass"></div>
    <div class="mySecondClass2"></div>
</html>

我想知道如何获得:

myFirstClass
mySendCLass2

使用正则表达式...我尝试使用class=".*",但它得到了名称之外的所有内容。

4

4 回答 4

2

你的例子"class=".*"似乎在轨道上,但这些的主要问题是 * 是“贪婪的” - 它会尽可能多地使用字符,然后可能匹配行中的最后一个引号。

一种选择是使用\w而不是., 来仅检索单词字符。根据您使用的语言,我认为 HTML 解析器可能是更好的选择。许多语言都有这样的库可用。

注意:除非您的用法非常基本,否则带有 \w 的正则表达式还需要考虑以空格分隔的多个类名。

于 2013-08-16T13:20:38.403 回答
2

不要使用正则表达式来解析 HTML。如果您使用的是 .NET,则可以使用HTML Agility Pack之类的东西。

对于您的特定查询,您可能可以执行以下操作;

var classNames = htmlDoc.DocumentNode
    .Descendants("div")
    .Select(x => x.Attributes["class"].Value);
于 2013-08-16T13:21:40.127 回答
2

默认情况下,正则表达式是急切的,因此它将得到以尽可能长的字符串".*开头"和结尾的所有内容。"您需要的是让它在第一次匹配时停止"。尝试这个:

class=\"[^\"]*\"
于 2013-08-16T13:22:22.137 回答
2

利用map function

var classes= $("div").map(function() {
    return this;
}).get();
for(i=0;i<classes.length;i++){
    console.log($(classes[i]).attr('class'));
}

工作代码的JSFiddle链接

http://jsfiddle.net/mkamithkumar/dLkkY/

于 2013-08-16T13:29:19.940 回答