簡體   English   中英

正則表達式(javascript)如何多次匹配兩個標簽之間的任何內容

[英]regular expression (javascript) How to match anything beween two tags any number of times

我正在嘗試查找HTML頁面中<nobr></nobr>標記之間的所有項目。 編輯:(nobr是一個例子。我需要在隨機字符串之間找到內容,而不總是在標簽之間)

我試過了

var match = /<nobr>(.*?)<\/nobr>/img.exec(document.documentElement.innerHTML);
alert (match);

但是它只發生一次。 +它出現兩次,一次帶有<nobr></nobr>標記,一次沒有它們。 我只需要沒有標簽的版本。

使用DOM

var nobrs = document.getElementsByTagName("nobr")

然后您可以遍歷所有nobr並提取innerHTML或對它們進行任何其他操作。

您需要循環執行

var match, re = /<nobr>(.*?)<\/nobr>/img;
while((match = re.exec(document.documentElement.innerHTML)) !== null){
   alert(match[1]);
}

(因為我無法評論拉斐爾的正確答案...)

exec正在執行應做的工作-查找第一個匹配項,將結果返回到match對象中,並為下一個exec調用進行設置。 match對象包含(在索引0處)與整個正則表達式匹配的整個字符串。 在隨后的時隙中,是由括號括起來的子組匹配的字符串的位。 因此match[1]包含示例中與“(。*?)”匹配的字符串的位。

您可以使用

while (match = /<nobr>(.*?)<\/nobr>/img.exec("foo <nobr> hello </nobr> bar <nobr> world </nobr> foobar"))
    alert (match[1]);

如果您使用的字符串不是xml元素,並且您堅持使用正則表達式,則返回的值可以用方括號來解釋。 .exec返回整個匹配字符串,后跟方括號表達式的內容。

如果您的文檔包含:

This is out.
Bzz. This is in. unBzz.

然后

/Bzz.(.*?)unBzz./img.exec(document.documentElement.innerHTML)

會給你'Bzz。 進來了。 在返回數組的元素0中,並且“此為in”。 在元素1中。嘗試顯示整個數組會以逗號分隔的形式給出兩者,因為這就是JavaScript試圖顯示它的方式。

因此, alert($match[1]); 是你所追求的。

它需要采取步驟,但您可以這樣做

match = document.documentElement.innerHTML.match(/<nobr>(.*?)<\/nobr>/img)
alert(match)//includes '<nobr>'

match_length = match.length;
for (var i = 0; i < match_length; i++)
{
    var match2 = match[i].match(/<nobr>(.*?)<\/nobr>/im);//same regex without the g option
    alert(match2[1]);
}

暫無
暫無

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

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