Javascript 正则表达式来提取div的所有属性

Javascript 正则表达式来提取div的所有属性,javascript,regex,Javascript,Regex,我需要提取某个标记的所有属性。所以我想用正则表达式来表示这个。我希望属性和值作为名称-值对 谢谢你的帮助 谢谢,您可以使用XML解析器,因为提供的输入是格式良好的XML。您可以使用XML解析器,因为提供的输入是格式良好的XML。您可以使用[jquery][1]获取元素的所有属性 $('sometag').getAttributes(); 可以使用[jquery][1]获取元素的所有属性 $('sometag').getAttributes(); 当然,您需要调整它以满足您的需要并处理糟糕的h

我需要提取某个标记的所有属性。所以我想用正则表达式来表示这个。我希望属性和值作为名称-值对

谢谢你的帮助


谢谢,您可以使用XML解析器,因为提供的输入是格式良好的XML。

您可以使用XML解析器,因为提供的输入是格式良好的XML。

您可以使用[jquery][1]获取元素的所有属性

$('sometag').getAttributes();

可以使用[jquery][1]获取元素的所有属性

$('sometag').getAttributes();
当然,您需要调整它以满足您的需要并处理糟糕的html


当然,您需要调整它以满足您的需要并处理糟糕的html。

不需要正则表达式。更简单的方法是使用:


返回一个数组NamedNodeMap,其中包含为相关元素定义的所有属性,包括自定义属性。有关如何访问每个属性及其值的示例,请参见链接。

不需要正则表达式。更简单的方法是使用:

返回一个数组NamedNodeMap,其中包含为相关元素定义的所有属性,包括自定义属性。有关如何访问每个属性及其值的示例,请参见链接。

请勿使用正则表达式!Javascript的DOM已经具备了您所需的所有信息,并且易于访问

列出DOM元素的所有属性:

var element = document.getElementById('myElementName');
var attributes = element.attributes;
for(var attr=0; attr<attributes.length; attr++) {
    alert(attributes[attr].name+" = "+attributes[attr].nodeValue);
}
在FF5、IE8、Opera11.5、Chrome12中测试上述代码:在所有代码中都有效,即使具有非标准属性也不可用正则表达式!Javascript的DOM已经具备了您所需的所有信息,并且易于访问

列出DOM元素的所有属性:

var element = document.getElementById('myElementName');
var attributes = element.attributes;
for(var attr=0; attr<attributes.length; attr++) {
    alert(attributes[attr].name+" = "+attributes[attr].nodeValue);
}

在FF5、IE8、Opera11.5、Chrome12中测试上述代码:在所有代码中都有效,即使使用非标准属性,也无法通过使用正则表达式在本机JavaScript中实现这一点。使用本机JavaScript,您有两个基本选项。您可以枚举节点的所有属性并进行智能筛选,以获得所需的内容,例如:

window.extractAttributes = function(node) {
    var attribString = "";
    var template = document.createElement(node.tagName);
    template.innerHTML = node.innerHTML;
    for (var key in node) {
        if (typeof node[key] == "string" && node[key] != "" && ! template[key]) {
            if (attribString.length > 0) {
                attribString += ", ";
            }
            attribString += key + "=" + node[key];
        }
    }

    return attribString;
};
或者,您可以使用Element.attributes来迭代已声明属性的列表。请注意,这可能无法检测在运行时动态添加的非标准属性值,例如:

window.extractAttributesAlternate = function(node) {
    var attribString = "";
    for (var index = 0; index < node.attributes.length; index++) {
        if (attribString.length > 0) {
            attribString += ", ";
        }
        attribString += node.attributes[index].name+ "=" + node.attributes[index].nodeValue;
    }

    return attribString;
}; 
请注意,第一种方法可能不会拾取页面标记中定义的自定义属性,第二种方法可能不会拾取页面上JavaScript动态定义的自定义属性

这给了我们选择3。您可以双向枚举属性,然后合并结果。这样做的好处是,无论何时/如何将任何自定义属性添加到元素中,都能够可靠地获取它们


下面是所有3个选项的示例:

在本机JavaScript中,不能使用正则表达式来实现这一点。使用本机JavaScript,您有两个基本选项。您可以枚举节点的所有属性并进行智能筛选,以获得所需的内容,例如:

window.extractAttributes = function(node) {
    var attribString = "";
    var template = document.createElement(node.tagName);
    template.innerHTML = node.innerHTML;
    for (var key in node) {
        if (typeof node[key] == "string" && node[key] != "" && ! template[key]) {
            if (attribString.length > 0) {
                attribString += ", ";
            }
            attribString += key + "=" + node[key];
        }
    }

    return attribString;
};
或者,您可以使用Element.attributes来迭代已声明属性的列表。请注意,这可能无法检测在运行时动态添加的非标准属性值,例如:

window.extractAttributesAlternate = function(node) {
    var attribString = "";
    for (var index = 0; index < node.attributes.length; index++) {
        if (attribString.length > 0) {
            attribString += ", ";
        }
        attribString += node.attributes[index].name+ "=" + node.attributes[index].nodeValue;
    }

    return attribString;
}; 
请注意,第一种方法可能不会拾取页面标记中定义的自定义属性,第二种方法可能不会拾取页面上JavaScript动态定义的自定义属性

这给了我们选择3。您可以双向枚举属性,然后合并结果。这样做的好处是,无论何时/如何将任何自定义属性添加到元素中,都能够可靠地获取它们


下面是所有3个选项的示例:

给定单个元素的文本,其中包含与元素的outerHTML等效的开始和结束标记,以下函数将返回一个包含所有属性名称=值对的对象。每个属性值可以是单引号、双引号或无引号。属性值是可选的,如果不存在,将采用属性的名称

函数getEleMattPropertieLemText{ //正则表达式从元素的HTML开始处选择开始标记。
var re_start_tag=/^给定单个元素的文本,其中包含与元素的outerHTML等效的开始和结束标记,以下函数将返回一个包含所有属性名称=值对的对象。每个属性值可以是单引号、双引号或无引号。属性值是可选的,如果不存在t将采用属性的名称

函数getEleMattPropertieLemText{ //正则表达式从元素的HTML开始处选择开始标记。
var re_start_tag=/^我认为正则表达式无法做到这一点。无论如何,不能直接做到。为什么不使用元素的attributes属性?您尝试了什么?哪里失败了?您希望我们为您编写解决方案?我认为正则表达式无法做到这一点。无论如何,不能直接做到。为什么

您不想使用元素的属性吗?您尝试了什么?你在哪里失败了?你想让我们为你编写一个解决方案吗?问题标签指定的是Javascript,而不是PHP。哦,很抱歉几秒钟后用Javascript重写。谢谢你的快速回复。我需要java脚本。我也发布了javascript答案,我删除了它,我不知道它为什么还在这里。@秋天你可以重新发布它吗?问题标签指定的是javascript,而不是PHP。哦,对不起,几秒钟后用javascript重写。秋天谢谢你的快速回复。我需要在java脚本中使用它。我也发布了javascript答案,我删除了它,我不知道它为什么还在这里。@秋天你可以重新发布它。除了它不适用于元素上定义的任何非标准属性。@aroth:根据链接,它适用于自定义属性,虽然我还没有确认。我在我的小提琴中尝试过它,但它似乎对自定义属性不起作用,至少对动态创建的元素编辑不起作用:如果在标记中添加自定义属性,它会起作用,但如果它们在运行时动态添加,则不会起作用。似乎:我的问题是,我得到的不是一个元素,而是一些文本内容。我希望所有属性都是arryattributes,它是元素数组的属性,而不是方法。除了它不适用于元素上定义的任何非标准属性。@aroth:根据链接,它适用于自定义属性,虽然我还没有确认。我在我的小提琴中尝试过它,但它似乎对自定义属性不起作用,至少对动态创建的元素编辑不起作用:如果在标记中添加自定义属性,它会起作用,但如果它们在运行时动态添加,则不会起作用。似乎:我的问题是,我得到的不是一个元素,而是一些文本内容。我希望所有属性都作为arryattributes是一个数组元素的属性,而不是一个方法。不能可靠地处理至少在Chrome和Firefox中动态添加的非标准属性,请参阅:不能可靠地处理至少在Chrome和Firefox中动态添加的非标准属性,请参阅:不在双引号中的属性(例如单引号或无引号)如何处理?也不适用于没有值的属性的其他元素,例如。option@selected.Yes它可以做很多调整,也不能处理=周围的额外空格,我不想为提问者编写一个功能齐全的html解析器,只是一个简单的例子来说明应该如何做。无论如何,为了解决您提到的和我提到的一些问题,可以对正则表达式进行如下修改/\s\w+?:\s*=?:\s*['].['].[']/g不使用双引号的属性(例如单引号或无引号)是什么?也不适用于没有值的属性的其他元素,例如。option@selected.Yes它可以做很多调整,也不能处理=周围的额外空格,我不想为提问者编写一个功能齐全的html解析器,只是一个简单的例子来说明应该如何做。无论如何,为了解决您提到的和我提到的一些问题,可以对正则表达式进行如下修改/\s\w+?:\s*=?:\s*['].['].[']/g+1以获得完整的答案。也许值得解释一下HTML属性和DOM属性之间的区别。如果属性与相关DOM属性的值不同,会发生什么情况?+1表示完整答案。也许值得解释一下HTML属性和DOM属性之间的区别。如果属性与相关DOM属性具有不同的值,会发生什么情况?