2015-04-29 52 views
-4

我寫了一個正則表達式來匹配HTML文本和它works in regex101.comJavaScript RegExp錯誤 - 無法重複

<h2>Dollarkurs\sAktuell<\/h2><\/div><div[^>?]+><div><table> 
<colgroup><col[^>?]+><col><col[^>?]+><\/colgroup><tbody><tr> 
<td[^>?]+>Kurs<\/td><td[^>?]+>([^\s^<?]+)\s*<span[^>?]+> 
(\+|-)?\d+\,?\d{0,2}%<\/span><span[^>?]+><\/span><\/td> 
<\/tr><tr><td[^>?]+>Kurszeit<\/td><td[^>?]+> 
(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?\sUhr 
<\/td><\/tr><tr><td[^>?]+>Kursdatum<\/td><td[^>?]+>([0-9\.]+)<\/td> 

測試字符串是:

<h2>Dollarkurs Aktuell</h2></div><div class='content'><div><table> 
<colgroup><col width='50px'><col><col width='100px'></colgroup><tbody><tr> 
<td class='bold'>Kurs</td><td class='textRight' colspan='2'>1,0947 <span class='distanceLeft right green'> 
+0,58%</span><span class='distanceLeft right imageIconPriceGreen'></span></td> 
</tr><tr><td class='bold' colspan='2'>Kurszeit</td><td class='textRight'> 
16:00:00 Uhr 
</td></tr><tr><td class='bold' colspan='2'>Kursdatum</td><td class='textRight'>28.04.2015</td> 

但在節目中,我得到這個錯誤:

 
Uncaught SyntaxError: Invalid regular expression: 
Nothing to repeat 

這裏是我的代碼:

var htmlTxt = "<h2>Dollarkurs Aktuell</h2></div><div class='content'><div><table><colgroup><col width='50px'><col><col width='100px'></colgroup><tbody><tr><td class='bold'>Kurs</td><td class='textRight' colspan='2'>1,0947 <span class='distanceLeft right green'>+0,58%</span><span class='distanceLeft right imageIconPriceGreen'></span></td></tr><tr><td class='bold' colspan='2'>Kurszeit</td><td class='textRight'>16:00:00 Uhr</td></tr><tr><td class='bold' colspan='2'>Kursdatum</td><td class='textRight'>28.04.2015</td>"; 

var re = new RegExp("<h2>Dollarkurs\sAktuell<\/h2><\/div><div[^>?]+><div><table><colgroup><col[^>?]+><col><col[^>?]+><\/colgroup><tbody><tr><td[^>?]+>Kurs<\/td><td[^>?]+>([^\s^<?]+)\s*<span[^>?]+>(\+|-)?\d+\,?\d{0,2}%<\/span><span[^>?]+><\/span><\/td><\/tr><tr><td[^>?]+>Kurszeit<\/td><td[^>?]+>(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?\sUhr<\/td><\/tr><tr><td[^>?]+>Kursdatum<\/td><td[^>?]+>([0-9\.]+)<\/td>", "gmi"); 

var result = re.exec(htmlTxt); 

while (result != null) { 
    document.write("["+re.lastIndex+"] "+result); 
    document.write("<br />"); 
} 
+2

將整個問題帶到這裏。 –

+1

請在這裏發佈您的相關代碼和錯誤消息,並且不要鏈接到其他網站來描述您的問題。 – tjati

+3

[不要用正則表達式解析HTML](http://stackoverflow.com/a/1732454/418066) – Biffen

回答

2

不考慮模式是否正確使用

相反:RECT或不

var re = new RegExp("\+", "gmi"); 

使用:

var re = /\+/gmi; 

MDN - Creating a regular expression

如果使用字符串構造,就需要串逃生所有的反斜線:

var re = new RegExp("\\+", "gmi"); 

正如評論已經提到的,用正則表達式解析HTML是not always a good idea尤其是在使用JavaScript的瀏覽器,因爲你已經在一個巨大的HTML解析器的上下文中。

+0

它的工作原理!謝謝! –

+0

從網上獲取美元匯率數據:http://www.finanzen.net/devisen/dollarkurs有沒有更好的主意? –

+0

@YingStyle - 當然。看看這個問題:[如何通過API獲取貨幣匯率?](http://stackoverflow.com/q/3139879/7586) – Kobi