[英]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.