Javascript匹配正则表达式

时间:2012-06-27 17:46:13

标签: javascript regex

我正在构建一个javascript应用程序,我需要知道属于用户选择的html标签,然后为了方便起见将它们放在一个数组中。

我使用了htmlText,它给了我一个看起来像这样的字符串:

<h1><span style="color: rgb(102, 51, 153); font-weight: bold; text-decoration: underline;"><sub>test</sub></span></h1>

由于我对正则表达式几乎一无所知,而且我所知道的似乎并不像我想要的那样,所以我希望你们中的一个人可以帮助我。

那么使上面的字符串看起来像以下数组的最佳方法是什么?

<h1>,
<span style="color: rgb(102, 51, 153); font-weight: bold; text-decoration: underline;">,
<sub>

到目前为止我的代码(不知道我是否在正确的轨道上):

var fullhtml = SEOM_common.range.htmlText;//Get user selection + Surrounding html tags
var tags = fullhtml.split(SEOM_common.selected_value);//Split by user selection
var tags_arr = tags[0].match(/<(.+)>/);//Create array of tags

感谢大家的回答和评论。我设法构建了以下方法,它完全符合我的要求。

find_all_parents : function(selectRange,endNode){
   var nodes = [];
    var nodes_to_go = [];
    if(selectRange.commonAncestorContainer) nodes_to_go.push(selectRange.commonAncestorContainer.parentNode);//all browsers
        else nodes_to_go.push(selectRange.parentElement());//IE<9 browsers

        var node;

        while( (node=nodes_to_go.pop()) && node.tagName.toLowerCase() != endNode){
            if(node.nodeType === 1){ //only element nodes (tags)
                nodes.push(node);
            }

            nodes_to_go.push(node.parentNode);          
        }
        return nodes;
    }

2 个答案:

答案 0 :(得分:1)

不要使用正则表达式。改为使用文档操作方法并自己获取标记(而不是标记的文本表示)。

例如:

var find_all_nodes = function(rootNode){
    var nodes = [];
    var nodes_to_go = [rootNode];
    var node;
    while( (node=nodes_to_go.pop()) ){
        if(node.nodeType === 1){ //only element nodes (tags)
            nodes.push(nodes_to_go);
        }
        var cs = node.childNodes;
        for(var i=0; i<cs.length; i++){
            nodes_to_go.push(cs[i]);
        }
    }
    return nodes;
}

获得标签后,您可以从中获取各种信息。我建议您查看MDN中的DOM文档以及Quirksmode的兼容性说明

答案 1 :(得分:0)

您不应该使用Regex进行HTML / XML解析。

......除非你有充分的理由这样做!

如果有,请将(<h1>)(<span[^>]*>)(<sub>)[^<]*</sub></span></h1>替换为$1,\n$2\n$3