簡體   English   中英

Javascript匹配正則表達式

[英]Javascript match regexp

我正在構建一個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;
    }

不要為此使用正則表達式。 請改用文檔處理方法,並自己獲取標簽(而不是標簽的文本表示形式)。

例如:

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中的兼容性說明

您不應該使用Regex進行HTML / XML解析。

...除非您有充分的理由這樣做!

如果是這樣,則將(<h1>)(<span[^>]*>)(<sub>)[^<]*</sub></span></h1>替換$1,\\n$2\\n$3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM