2013-11-21 66 views
-2

我有这样的格局之中大断章取义的HTML:如何匹配此模式

<td>SIP/[email protected]</td> 

我想匹配这一点,越来越:

159 

的结果。这种模式总是相同的,唯一的区别是“/”和“@”之间的数字。

我不知道如何在JS正则表达式中做到这一点。有任何想法吗?

+0

你有没有尝试过任何东西? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions解释正则表达式如何在JS中工作。对于这个表达式,你没有考虑任何JS。 –

+0

“SIP”和“@PBX”是否一致?我们可以期待在这里改变什么? –

+0

是的,我有,而且我经常做简单的正则表达式模式,我只是在发烧友匹配上很糟糕,并且正在努力学习更多。 – dthree

回答

1

你可以使用正则表达式变量的字符串是这样的:

/SIP\/(\d+)@PBX/ 

此发现:

text SIP 
followed by a/(which is escaped so it isn't interpreted as the end of the regex) 
followed by one or more digits (captured in a group delineated with parens) 
followed by the text @PBX 

然后,你拉出第一个匹配的组如果有匹配的话。

而且,如果除了页面中的<td>之外没有其他内容可以继续使用,那么您可以使用此通用代码查看页面中所有<td>元素。理想情况下,您可以使用页面结构更清晰地定位适当的<td>单元格。

var tds = document.getElementsByTagName("td"); 
var regex = /SIP\/(\d+)@PBX/; 
for (var i = 0; i < tds.length; i++) { 
    var matches = tds[i].innerHTML.match(regex); 
    if (matches) { 
     var number = parseInt(matches[1], 10); 
     // process the number here 
    } 
} 

工作演示:http://jsfiddle.net/jfriend00/vDwfs/


如果HTML是不是在你的页面,但在一个字符串,那么你可以使用相同的正则表达式的HTML字符串搜索。如果根据您的上下文看起来明智,您可以用<td></td>括起来。

var matches, number; 
var regex = /SIP\/(\d+)@PBX/g; 
while (matches = regex.exec(htmlString)) { 
    number = parseInt(matches[1], 10); 
    // process the number here 
} 
0

假设你已经保存在名为html

html.match(/SIP\/([0-9]*)\@PBX/g)

1

您可以分析与下面的正则表达式的字符串:

var result = "<td>SIP/[email protected]</td>".match("\<td\>SIP\/([0-9]+)\@PBX\<\/td\>"); 

然后,你想要的号码将被存储在result[1]

alert(result[1]); 

诀窍是围绕你想要的那部分字符串在括号内上油。然后,匹配函数的结果是一个数组,其中第一个元素是由正则表达式匹配的整个字符串,然后为括号中的每个组添加一个新元素。