如何匹配这种模式

时间:2013-11-21 02:20:22

标签: javascript regex

我在大量的HTML中有这种模式:

<td>SIP/159@PBX</td>

我想匹配这个,得到:

159
结果是

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

我不知道如何在JS Regex中执行此操作。有什么想法吗?

4 个答案:

答案 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]