在javascript中解析这个正则表达式我做错了什么?

时间:2015-12-30 10:36:53

标签: javascript html regex

我的字符串是:

<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. &amp; 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. &amp; Name : </b></td><td.*>([0-9][a-z][A-Z]+)</span></td>", "m");

trainDetails为空或为空。

我所要做的就是在span元素中获取火车名称和火车编号。

我做错了什么指针?

3 个答案:

答案 0 :(得分:4)

它对我有用:

使用RegExp

string = '<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. &amp; 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. &amp; 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. &amp; 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>.+ 赶上第一组,你就会得到它。