我有这样的格局之中大断章取义的HTML:如何匹配此模式
<td>SIP/[email protected]</td>
我想匹配这一点,越来越:
159
的结果。这种模式总是相同的,唯一的区别是“/”和“@”之间的数字。
我不知道如何在JS正则表达式中做到这一点。有任何想法吗?
我有这样的格局之中大断章取义的HTML:如何匹配此模式
<td>SIP/[email protected]</td>
我想匹配这一点,越来越:
159
的结果。这种模式总是相同的,唯一的区别是“/”和“@”之间的数字。
我不知道如何在JS正则表达式中做到这一点。有任何想法吗?
你可以使用正则表达式变量的字符串是这样的:
/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
}
假设你已经保存在名为html
html.match(/SIP\/([0-9]*)\@PBX/g)
试试这个:"SIP/[email protected]".match(/[^\/]+\/([^@]+)@[\s\S]*/)[1]
您可以分析与下面的正则表达式的字符串:
var result = "<td>SIP/[email protected]</td>".match("\<td\>SIP\/([0-9]+)\@PBX\<\/td\>");
然后,你想要的号码将被存储在result[1]
:
alert(result[1]);
诀窍是围绕你想要的那部分字符串在括号内上油。然后,匹配函数的结果是一个数组,其中第一个元素是由正则表达式匹配的整个字符串,然后为括号中的每个组添加一个新元素。
你有没有尝试过任何东西? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions解释正则表达式如何在JS中工作。对于这个表达式,你没有考虑任何JS。 –
“SIP”和“@PBX”是否一致?我们可以期待在这里改变什么? –
是的,我有,而且我经常做简单的正则表达式模式,我只是在发烧友匹配上很糟糕,并且正在努力学习更多。 – dthree