webForumDet fria alternativet

Javascript preg_match

8 svar · 584 visningar · startad av learn

learnMedlem sedan jan. 20051 143 inlägg
#1

Jag försöker omvandla PHPs preg_match till javascript. Hittade funktionen match() men förstår inte riktigt hur den fungerar.

Det jag vill åstadkomma är följande:

Jag har en sträng:

str = '
<p>Hejsan</p>

<script type="text/javascript">
alert("test");
</script>

<p>Hejdå</p>
';

och vill nu hämta allt inom script-taggarna och spara i variabeln mittScript:

mittScript = 'alert("test")';

Hur kan jag göra?

voigtann1Medlem sedan juni 20018 810 inlägg
#2
	var myregexp = /<script[\s\S]*>([\w\W]+)<\/script>/img;
	var match = myregexp.exec(subject);
	while (match != null) {
		//match[1]; get the text between script-tags
		match = myregexp.exec(subject);
	}

match[1]ge dig alert("test") i ditt exempel (även om det inte gå att ha en javascripts sträng på det sätt du försöker rendera ut den på.

learnMedlem sedan jan. 20051 143 inlägg
#3

Tack för ditt exempel!

voigtann1 skrev:

även om det inte gå att ha en javascripts sträng på det sätt du försöker rendera ut den på.

Hur menar du nu?

voigtann1Medlem sedan juni 20018 810 inlägg
#4
var str = 'hej
på
dig';

fungera inte i javascript, om det är radbrytningar så är det \n som gäller ;)

var str = 'hej\npå\ndig';
learnMedlem sedan jan. 20051 143 inlägg
#5

voigtann1 skrev:

var str = 'hej
på
dig';

fungera inte i javascript, om det är radbrytningar så är det \n som gäller ;)

Aha, ja jo :)

Jag tänkte sedan köra javascripts eval() på den hämtade koden. Några invändningar, något som jag ska tänka på?

voigtann1Medlem sedan juni 20018 810 inlägg
#6

varför inte bara rendera ut koden som den är, vet inte var du får koden ifrån men hade lika väl kunnat placera

<p>Hejsan</p>

<script type="text/javascript">
alert("test");
</script>

<p>Hejdå</p>

direkt in på sidan, eller bara i ditt fall med php ta bort allt som inte är <script>.....</script> med RegExp på server side, men visst eval fungera väl

learnMedlem sedan jan. 20051 143 inlägg
#7
	var myregexp = /<script[\s\S]*>([\w\W]+)<\/script>/img;
	var match = myregexp.exec(subject);
	while (match != null) {
		//match[1]; get the text between script-tags
		match = myregexp.exec(subject);
	}

Hmm, den verkar stanna på första förekomsten. Jag vill att den hittar alla script-taggar. Strängen kan se ut så här:

str = '<p>Hejsan</p><script type="text/javascript">alert("test");</script><p>Hejdå</p><script type="text/javascript">alert("test2");</script>';

R: Nej föresten, det är bara den sista förekomsten som hittas, och jag tror jag kanske hittat felet. Min andra script-tagg innehåller måsvingar och lite andra tecken som inte hittas i ovanstående match(). Kan det stämma?

voigtann1Medlem sedan juni 20018 810 inlägg
#8
var subject = '<p>Hejsan</p><script type="text/javascript">alert("test1");</script><p>Hejdå</p><script type="text/javascript">alert("test2");</script>';
	var myregexp = /<script[\s\S]*?>([\w\W]*?)<\/script>/img;
	var match = myregexp.exec(subject);
	while (match != null) {
		//match[1]; get the text between script-tags
alert(match[1]);
		match = myregexp.exec(subject);
	}
learnMedlem sedan jan. 20051 143 inlägg
#9

voigtann1 skrev:

var subject = '<p>Hejsan</p><script type="text/javascript">alert("test1");</script><p>Hejdå</p><script type="text/javascript">alert("test2");</script>';
	var myregexp = /<script[\s\S]*?>([\w\W]*?)<\/script>/img;
	var match = myregexp.exec(subject);
	while (match != null) {
		//match[1]; get the text between script-tags
alert(match[1]);
		match = myregexp.exec(subject);
	}

Nja, nu alert'ar den alla matchningar två gånger om

R: My bad, det tycks fungera galant. Tack så mycket! :)

Genererad på 373 ms · cache AV · v20260730165559-full.f96bc7eb