webForumDet fria alternativet

Split

8 svar · 762 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

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

voigtann1Medlem sedan juni 20019 519 inlägg
#2

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
#3
'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

voigtann1Medlem sedan juni 20019 519 inlägg
#4

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
#5

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

voigtann1Medlem sedan juni 20019 519 inlägg
#6

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
#7
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
#8

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

voigtann1Medlem sedan juni 20019 519 inlägg
#9

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
%>
136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)