webForumDet fria alternativet

regExp. Returnera enbart $1

ASP

7 svar · 679 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hej igen. RegExp är ju riktigt kul... men inte helt enkelt att förstå sig på ibland.

Nedan fungerar och returnerar hela träffen

		regExp.Pattern = "return overlib\('(.*?)'\);"
	
		Set hittade = regExp.Execute(strHtmlSenasteNytt)
		redim myTextArray(varArrayLength)
		myCounter = 0
		For each item in hittade
			myTextArray(myCounter) = item.value
			Response.Write(item.value) &"<br>"
			myCounter = myCounter +1
		Next%>

MEN... hur gör jag om jag vill att arrayen ovan enbart ska innehålla regExp.Pattern = "$1".
Jag vill alltså skala bort start och stop tecknen i sökningen så att enbart det inom (.*?) är kvar.

Några pigga hjärnor online ? *ler*

Medlem sedan maj 20012 080 inlägg
#2

strHtmlSenasteNytt =

<br>return overlib('En rättstvist hindrade BSD från att bli världens mest populära öppen källkodsbaserade operativsystem. Det hävdar grundaren av Open BSD.');<br><hr>

Vill ha ut:
En rättstvist hindrade BSD från att bli världens mest populära öppen källkodsbaserade operativsystem. Det hävdar grundaren av Open BSD.

Medlem sedan jan. 20032 285 inlägg
#3

Du tror inte att det här kan funka?

		regExp.Pattern = "return overlib\('(.*?)'\);"
	
		Set hittade = regExp.Execute(strHtmlSenasteNytt)
		redim myTextArray(varArrayLength)
		myCounter = 0
		For each item in hittade
			myTextArray(myCounter) = Mid(item.value, 17, Len(item.value) - 19)
			Response.Write(item.value) &"<br>"
			myCounter = myCounter +1
		Next%>
Medlem sedan jan. 2003438 inlägg
#4

:)

För att visa något som inte är lika snyggt som Sebbe´s lösning, men..... :

		regExp.Pattern = "return overlib\('(.*?)'\);"
	
		Set hittade = regExp.Execute(strHtmlSenasteNytt)
		redim myTextArray(varArrayLength)
		myCounter = 0
		For each item in hittade
			strValue = Replace(item.value, "return overlib('", "")
			strValue = Replace(strValue, "');", "")
			myTextArray(myCounter) = strValue
			Response.Write(strValue) &"<br>"
			myCounter = myCounter +1
		Next%>

/r
Var intresserad av Sebbes lösning och kollade precis på den, han är grym som vanligt :) Men tänk bara på att du måste ändra det du skriver ut i Response.Write också, typ:

			strValue = Mid(item.value, 17, Len(item.value) - 19)
			myTextArray(myCounter) = strValue
			Response.Write(strValue) &"<br>"
Medlem sedan juni 2004533 inlägg
#5

Använd SubMatches:

regExp.Pattern = "return overlib\('(.*?)'\);"
	
Set hittade = regExp.Execute(strHtmlSenasteNytt)
redim myTextArray(varArrayLength)
myCounter = 0
For each item in hittade
	myTextArray(myCounter) = item.SubMatches(0).value
	Response.Write item.SubMatches(0).value & "<br>"
	myCounter = myCounter +1
Next
Medlem sedan jan. 2003438 inlägg
#6

Det blir bara bättre och bättre :)

Men skall inte .value tas bort?

Av intresse så kollade jag ovanstående och måste ta bort value för att få det till att funka.

Medlem sedan juni 2004533 inlägg
#7

Ja, det stämmer. Value ska bort.

Medlem sedan maj 20012 080 inlägg
#8

Jag körde Sebbes lösning redan innan men hoppades på att det fanns någon metod med att använda datat i $1 för att åstakomma det där.

Tack för alla tips. Detta forum regerar !

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)