簡體   English   中英

匹配所有 div 標簽的正則表達式

[英]Regex that matches all div tags

我需要一個匹配 HTML 代碼中所有 div 標簽的正則表達式,而不使用 DOM 解析器

我試過這個

var expression = /<div\s*"?.*"?\s*>[\S\s]*?<\/div>/gi;
var regexpress = new RegExp(expression)

matches = text.match(regexpress);
if (matches != null) { returnarray.push(matches); }
return returnarray;

但結果:

input text:
<div wdlm></div>
<div></div>
<div></div>

output array:
element 1:<div wdlm></div> <div></div>
element 2:<div></div>

數組的第一個元素同時需要 2 個 div。


通過閱讀評論,這是解決方案

        var returnarray = [];
        var matches = null;
        var expression = /<div\s*"?.*?"?\s*>[\S\s]*?<\/div>/gi;       
        var regexpress = new RegExp(expression);
        
        matches = text.match(regexpress);
        if(matches != null) {
            returnarray.push(matches);
        }
        
        return returnarray;

另外,我正在思考一個問題:

正則表達式可以動態分配嗎?

就像是

var expression = /<VARIABLE\s*"?.*"?\s*>[\S\s]*?<\/VARIABLE>/gi;

在哪里 VARIABLE 它是一個var VARIABLE ,通過更改VARIABLE的輸入而不僅僅是div來獲取代碼中的每個元素?


有人可以幫我解決這個問題嗎?

我不建議使用正則表達式來解析 HTML 字符串。 如果你能忍受這個限制,這里是任意 HTML 標簽的正則表達式解決方案,它不支持嵌套,並且在極端情況下失敗,例如<div title="</div>"></div>

 const input = '<div wdlm></div>\n' + '<div></div>\n' + '<div></div>'; function parseTags(tag, str) { let re = new RegExp('<' + tag + '\\b\\s*"?.*?"?\\s*>[\\S\\s]*?<\\/' + tag + '>', 'gi'); return str.match(re) || []; } let tags = parseTags('div', input); console.log('- input: "' + input + '"\n- tags: ' + JSON.stringify(tags, null, ' '));

Output:

- input: "<div wdlm></div>
<div></div>
<div></div>"
- tags: [
 "<div wdlm></div>",
 "<div></div>",
 "<div></div>"
]

暫無
暫無

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

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