Вам нужно определить индекс открывающей квадратной скобки - InStr(origin, "[")
(обратите внимание на двойные кавычки) - хорошее начало.
Теперь вы можете выполнить цикл от этого индекса до конца строкииспользуя функцию Mid$
для проверки символа по текущему индексу, пока не будет найдена закрывающая скобка:
Dim currentPosition As Long
currentPosition = InStr(origin, "[")
If currentPosition = 0 Then
' no opening bracket. now what?
Else
Dim bracketedWord As String
For currentPosition = currentPosition + 1 To Len(origin)
If Mid$(origin, currentPosition, 1) <> "]" Then
bracketedWord = bracketedWord & Mid$(origin, currentPosition, 1)
Else
'found the closing bracket: we're done.
Exit For
End If
Next
End If
Или вы можете использовать InStr
, чтобы найти открывающую скобку [
и позиции закрывающей скобки ]
, затем вычислите длину подстроки между этими двумя позициями и используйте функцию Mid$
, чтобы вытянуть подстроку без зацикливания.
В качестве альтернативы, со ссылкой на Регулярные выражения Microsoft VBScript 5.5 вы можете использовать простое регулярное выражение:
Public Function FindBracketedWord(ByVal value As String) As String
Dim regex As RegExp
Set regex = new RegExp
regex.Pattern = "\[(\w+)\]" ' matches a square-bracketed "word", no spaces
Dim matches As MatchCollection
Set matches = regex.Execute(value)
If matches.Count <> 0 Then result = matches(0).SubMatches(0)
FindBracketedWord = result
End Function