您可以使用函數作爲第二個參數來替換。該函數允許來自表達式的參數。參數是(完全匹配,[捕獲項目,]匹配偏移量,原始字符串)。您可以在此功能中擁有多個捕捉項目。一個簡單的例子:
var testItem = '[email protected]';
var expression = new RegExp(/^([^@]+)@([^@]+)$/)
var returnItem = testItem.replace(expression, function(full_match, $1, $2, offset, original){
console.log('full match: '+full_match)
console.log('$1: '+$1)
console.log('$2: '+$2)
console.log('offet: '+offset)
console.log('original: '+original)
return (typeof $1 != "undefined" && typeof $2 != "undefined") ? $1+','+$2 : false;
});
if (returnItem !== false) console.log(returnItem.split(','))
else console.log('bad return value');
的片段聲明瞭一個簡單的字符串,劫掠@符號兩側的項目的表達式,然後使用一個替代函數返回兩個匹配的項目,他們已經被解析之後。控制檯登錄返回函數是爲了演示每個變量持有的內容。運行上面的代碼後,我收到了以下的輸出:
full match: [email protected]
$1: test1
$2: test2
offet: 0
original: [email protected]
["test1", "test2"]
您可以用它來解析從正則表達式用小修改的回報。 我的示例代碼有一個問題:我的返回使用逗號分割來創建數組。如果您的內容可能有逗號,則無法使用。
這是不是對你的問題,你可以使用類似以下內容:
var temp = '<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">http://www.drsketchysdublin.com/event-registration/?ee=11</a>'
var expression = /<a\shref="https?[^>]+>(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>/ig;
var options = {target : 'blank'}
console.log(temp.replace(expression, function(full_match, $1, $2, offset, original){ return '<a href="'+$1+'" target="'+options.target+'">'+$2+'</a>';}))
只是改變變量位(和更改控制檯登錄到理所當然的回報),你應該沒事的。 請注意,我從你的正則表達式中刪除了一組括號,他們似乎沒有用於任何事情,所以我放棄了它們。如果你有任何關於使正則表達式更普遍的問題讓我知道。
首先,你確定你的正則表達式匹配正確嗎? (也注意到許多回應會批評你使用正則表達式來瀏覽HTML,因爲這是JQuery的選擇器的完美之處) – Katana314
很確定 - 我一直在使用[Rad Softare Regex Designer](http:// rad-software-regular -expression-designer.software.informer.com/1.4/)來測試它。 至於你的第二點,你可能是正確的,但因爲我必須在某個時候使用正則表達式來提取域名,我想我可能會使用它的整個事情。 – looeee