正则表达式提取html注释属性

时间:2014-09-13 14:03:32

标签: javascript html regex

我有一个包含以下注释的表格单元格:

 <!-- FieldName="Predicted Process Equipment Potable Usage"
             FieldInternalName="PredictedProcessEquipmentPotable"
             FieldType="SPFieldNumber" -->

有许多表格单元格具有相似的模式注释,其中属性的值不同,但属性始终相同(FieldName,FieldInternalName和FieldType)。

如何在此类评论中使用REGEX提取FieldInternalname? 是否有非正则表达方式呢?

请帮忙!

2 个答案:

答案 0 :(得分:2)

使用以下正则表达式并从组索引1中获取FieldInternalName的值。

<!--[\S\s]*?FieldInternalName="([^"]*)"[\S\s]*?-->

DEMO

> var m = 'foo\n <!-- FieldName="Predicted Process Equipment Potable Usage"\n            FieldInternalName="PredictedProcessEquipmentPotable"\n           FieldType="SPFieldNumber" -->';
undefined
> console.log(/<!--[\S\s]*?FieldInternalName="([^"]*)"[\S\s]*?-->/.exec(m)[1]);
PredictedProcessEquipmentPotable

答案 1 :(得分:1)

  

是否有非正则表达方式呢?

commentNode.data;

评论节点有 nodeType 8,所以如果您不知道它将是哪个子节点,您可以编写类似的函数此

function getNodesByType(node, type, childrenOnly) {
    var i,
        o = [];
    if (node.childNodes && node.childNodes.length)
        for (i = 0; i < node.childNodes.length; ++i)
            if (node.childNodes[i].nodeType === type)
                o.push(node.childNodes[i]);
            else if (!childrenOnly && node.childNodes[i].nodeType === 1)
                Array.prototype.push.apply(
                    o,
                    getNodesByType(node.childNodes[i], type, childrenOnly)
                );
    return o;
}

并调用getNodesByType(yourTdElement, 8, true);以获取评论节点的数组,这些评论节点是您<td>

的直接子节点