我有這樣的格局之中大斷章取義的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