ASP обрезать строку в регулярном выражении - PullRequest
0 голосов
/ 13 января 2012

Кто-нибудь знает, как обрезать значение $1?

' 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 ]

2 голосов
/ 13 января 2012

Окружите свою группу захвата с помощью \s* и, пока вы в ней, измените шаблон, чтобы избежать использования .* (вы хотите захватить все, кроме [ или пробела - используйте дополненный класс символов ):

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

(примечание: не уверен, что [ необходимо экранировать в классе символов)

1 голос
/ 14 января 2012

Пересмотр шаблона является хорошим решением в таком случае.
Как альтернатива;
Метод Replace объекта RegExp имеет функцию обратного вызова, которую можно использовать в качестве альтернативы ревизии шаблона.
Иногда для обработки более сложных шаблонов может потребоваться функция обратного вызова.

Кроме того, я бы использовал шаблон типа \[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 ( Match string , [, Group1 string , Group2 string , ...], MatchStartPosition long , OriginalText string )

...