2013-11-21 99 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]); 

訣竅是圍繞你想要的那部分字符串在括號內上油。然後,匹配函數的結果是一個數組,其中第一個元素是由正則表達式匹配的整個字符串,然後爲括號中的每個組添加一個新元素。