【发布时间】:2015-04-29 07:41:02
【问题描述】:
我写了一个正则表达式来匹配 HTML 文本和它works in regex101.com。
<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>
但是在程序中,我收到了这个错误:
未捕获的 SyntaxError:无效的正则表达式: 没有什么可重复的这是我的代码:
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 />");
}
【问题讨论】:
-
在这里提出整个问题。
-
请将您的相关代码和错误信息贴在这里,不要链接到其他网站来描述您的问题。
-
@Biffen 这个答案很有趣,本身并没有错,但是使用正则表达式从预期的 HTML 中抓取值并没有错。他们没有尝试使用正则表达式解析 HTML。
-
@L3viathan 你和我显然有不同的意见:我会说使用正则表达式来抓取 HTML 肯定是有问题的。要么 HTML 片段每次都是完全相同的字符串,在这种情况下根本不需要刮掉它,或者(更有可能)它会随着时间的推移而改变,而正则表达式迟早会获胜不行。
标签: javascript regex