2012-01-13 75 views
0

有誰知道如何修剪$1值?正則表達式中的ASP修飾字符串

' URL Replacement, www.Scirra.com 
Dim objRegExp : set objRegExp = new RegExp 
With objRegExp 
    .Pattern = "\[url\](.*)\[\/url]" 
    .IgnoreCase = True 
    .Global = True 
End With 
strMessage = objRegExp.replace(strMessage, "<a href=""$1"" rel=""nofollow"">$1</a>") 
set objRegExp = nothing 

例如,如果我輸入:

[url] http://www.scirra.com[/url] 

這使得作爲因爲%20之前的一個不可點擊的鏈接。我想要做的是一樣的東西:

strMessage = objRegExp.replace(strMessage, "<a href=""" & trim($1) & """ rel=""nofollow"">" & trim($1) & "</a>") 

回答

2

環繞您的​​捕獲組\s*和,而你在它,改變模式,以避免使用.*(你想捕捉一切,但一個[或空間 - 使用補充字符類):

.Pattern = "\[url\]\s*([^\[\s]+)\s*\[/url\]" 

(注:不知道[需要在字符轉義類)

1

修改模式是一個很好的搜索解決方案在這種情況下。
作爲替代;
替換正則表達式對象的方法具有可以作爲替代圖案修訂使用回調功能。
有時,回調函數可能需要處理更復雜的模式。

此外,我會使用\[url\]([^[]*)\[/url\]而不是\[url\](.*)\[\/url]這樣的模式。
使用包含多個bbcode的表達式檢查匹配,您會看到我爲什麼建議。

' URL Replacement, www.Scirra.com 

Function cb_CreateLink(sMatch, sGroup1, iMatchStartPos, sSubjectText) 
    cb_CreateLink = "<a href="""& Trim(sGroup1) &""" rel=""nofollow"">"& Trim(sGroup1) &"</a>" 
End Function 

Dim strMessage : strMessage = "[url] http://www.scirra.com[/url] [url] http://www.scirra.com[/url]" 
Dim objRegExp : set objRegExp = new RegExp 
With objRegExp 
    .Pattern = "\[url\]([^[]*)\[/url\]" 
    .IgnoreCase = True 
    .Global = True 
End With 
strMessage = objRegExp.replace(strMessage, GetRef("cb_CreateLink")) 
set objRegExp = Nothing 

Response.Write strMessage 

注意的是:引用的功能的結構是通過依賴於基團的該圖案中的數可變的。

callbackFunction參數比賽,[,組別1組2,...],MatchStartPositionOriginalText