我在大量的HTML中有这种模式:
<td>SIP/159@PBX</td>
我想匹配这个,得到:
159
结果是。这种模式总是一样的,唯一的区别是“/”和“@”之间的数字。
我不知道如何在JS Regex中执行此操作。有什么想法吗?
答案 0 :(得分: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
}
答案 1 :(得分:1)
您可以使用以下正则表达式分析字符串:
var result = "<td>SIP/159@PBX</td>".match("\<td\>SIP\/([0-9]+)\@PBX\<\/td\>");
然后,您想要的数字将存储在result[1]
:
alert(result[1]);
诀窍是围绕要在括号中隔离的字符串部分。然后,match函数的结果是一个数组,其中第一个元素是正则表达式匹配的整个字符串,然后是括在括号中的每个组的新元素。
答案 2 :(得分:0)
假设您将字符串存储在名为html
html.match(/SIP\/([0-9]*)\@PBX/g)
答案 3 :(得分:0)
试试这个:"SIP/159@PBX".match(/[^\/]+\/([^@]+)@[\s\S]*/)[1]