2012-01-13 97 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