devotionMedlem sedan jan. 20013 582 inlägg Hej,
Jag har följande lilla fina funktion, som hämtar ut värdet som är omslutet av brackets, i en sträng.
'Funktion för att hämta värden mellan brackets
function GetBracketedPart(s)
dim m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
set m = re.execute(s)
sResult = m(0).submatches(0)
else
sResult = ""
end if
GetBracketedPart = sResult
end function
Hur modifierar jag den att hantera
[12345 KOD]
Dvs mha parameter hämta ut antingen 12345 eller KOD?
Det är alltid mellansteg mellan.
Funderade på om man kan använda split på något sätt, och sen styra vilken position man vill ha i funktionens parametrar.
Typ:
'Funktion för att hämta värden mellan brackets
function GetBracketedPart(s, sPos)
dim m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
set m = re.execute(s)
sResult = m(0).submatches(0)
else
sResult = ""
end if
GetBracketedPart = sResult
end function
Jag skulle ju kunna göra det i två steg:
a=split(GetBracketedPart(s))
sPart1 = a(0)
sPart2 = a(1)
Jag vill dock att detta är klart, direkt ifrån funktionen.
:)
Mvh
Henrik
Det är ju bara att köra det i din sResult innan du sätter den på GetBrackertPart
devotionMedlem sedan jan. 20013 582 inlägg 'Funktion för att hämta värden mellan brackets
function GetBracketedPart(s)
dim m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
set m = re.execute(s)
sResult = m(0).submatches(0)
else
sResult = ""
end if
GetBracketedPart = Split(sResult)
end function
...
GetBracketedPart(0)
?
Mvh
Henrik
Nej
GetBracketPart(...)(0) om något, fast du vill inte köra detta varje gång, spara resultatet i en variabel och anropar variabeln än att anropar samma funktion två gånger:
GetBracketPart(...)(0)
GetBracketPart(...)(1)
Är sämmre än:
dim obj
obj = GetBracketPart(...)
obj(0)
obj(1)
devotionMedlem sedan jan. 20013 582 inlägg Kan man göra så här:
'Funktion för att hämta värden mellan brackets
function GetBracketedPart(s, pos)
dim a, m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
set m = re.execute(s)
a = split(m(0).submatches(0))
sResult = a(pos)
else
sResult = ""
end if
GetBracketedPart = sResult
end function
...
=GetBracketedPart(s, 0)
Och på så sätt få ut
12345
:)
Mvh
Henrik
Ja, men det är ett korkat sätt om du skall hämta ut flera postioner från samma sträng, då kör du samma funktion om och om igen, vilket är onödigt.
Peter SMedlem sedan dec. 20025 483 inlägg s = "[12345 KOD]"
Function GetBracketedPart(value, pos)
dim m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
re.pattern = "[^\s\[\]]+"
re.global = true
set m = re.execute(value)
if pos - 1 < m.count then
sResult = m(pos - 1)
end if
else
sResult = ""
end if
GetBracketedPart = sResult
End Function
response.write GetBracketedPart(s, 1) ' -> 12345
response.write GetBracketedPart(s, 2) ' -> KOD
devotionMedlem sedan jan. 20013 582 inlägg Funkar ju fint... :)
Går det att modifiera, så att om man sätter pos --> "" returneras 12345 KOD?
Dvs:
response.write GetBracketedPart(s, "") --> 12345 KOD
Mvh
Henrik
Ja, dock så ser jag fortfarande inte varför du gör det som du gör..
redigerad, återkommer.
<%
s = "[12345 KOD]"
Function GetBracketedPart(value, pos)
dim m, re, sResult
set re = new regexp
re.pattern = "\[([^\]]+)\]"
if re.test(s) then
If pos = "" Then
set m = re.execute(value)
sResult = m(0).SubMatches(0)
Elseif IsNumeric(pos) Then
re.pattern = "[^\s\[\]]+"
re.global = true
set m = re.execute(value)
if pos - 1 < m.count then
sResult = m(pos - 1)
end if
end if
else
sResult = ""
End If
GetBracketedPart = sResult
End Function
response.write GetBracketedPart(s, 1) & "<br />" ' -> 12345
response.write GetBracketedPart(s, "") & "<br />" ' -> 12345
response.write GetBracketedPart(s, 2) & "<br />" ' -> KOD
%>