我的字符串是:
<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. & Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672 / SOUTH TRUNK EXP</span></td>
我设法制定正则表达式
var trainDetails = new RegExp("<b>Train No. & Name : </b></td><td.*>([0-9][a-z][A-Z]+)</span></td>", "m");
但trainDetails
为空或为空。
我所要做的就是在span元素中获取火车名称和火车编号。
我做错了什么指针?
答案 0 :(得分:4)
它对我有用:
使用RegExp
string = '<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. & Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672 / SOUTH TRUNK EXP</span></td>';
var trainDetail = string.replace( new RegExp(".*?([^\>]+)(?:\<\/[A-z]+\>)+$","g"), '$1');
使用DOM
string = ('<b>Train No. & Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672 / SOUTH TRUNK EXP</span></td>');
string = string.replace(new RegExp( '(<\/?)td', 'g'), '$1xmltd');
tempDoc = document.createElement('xml');
tempDoc.innerHTML = string;
node = tempDoc.getElementsByTagName('xmltd');
trainDetails = node[node.length-1].textContent;
假设最后“&lt; td&gt;”的条件在字符串中有火车细节。
答案 1 :(得分:4)
正则表达式不是此用例的理想解决方案。我建议使用浏览器的内置HTML解析器来获取<span>
的内部HTML。
var el = document.createElement('html');
el.innerHTML = '<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. & Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672 / SOUTH TRUNK EXP</span></td>';
var output = el.getElementsByTagName('span')[0].innerHTML;
输出变量的值变为:
12672 / SOUTH TRUNK EXP
修改强>
如果您对特定的<span>
感兴趣,我建议在其标记或其父<td>
标记中添加一个类,例如:
<span class="train-number-and-name">
12672 / SOUTH TRUNK EXP
</span>
然后像这样取出:
var output = el.querySelector('span.train-number-and-name').innerHTML;
答案 2 :(得分:1)
应该没问题:.+\<span>(.+)\<\/span>.+
赶上第一组,你就会得到它。