• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[JS] function String.prototype.afterbefore

jspit

Lounge-Member
Hi,
hab eine Stringfunktion geschrieben, die einen Substring liefert der hinter 'after' und
vor 'before' eingebettet ist (substring-after-before). Die Funktionalität von
"substring-before" und "substring-after" ist mit enthalten.
Getestet FF 3.5, IE, Opera 9.62
Das Problem mit Regulären Ausdrücken zu lösen ist mir nicht gelungen.

Hier der Code:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Test String.prototype.afterbefore</title>
<script type="text/javascript">
<!--
//Liefert Teilstring der hinter after beginnt und vor before endet
//Liefert '' wenn after nicht gefunden wird oder hinter after der String before nicht gefunden wird
//Liefert mit after='' den Teilstring bis vor before (substring-before)
//Liefert mit before='' oder ohne before den String hinter after bis zum Ende (substring-after)
String.prototype.afterbefore = function (after, before){
    var s = this;
    var pfs = s.indexOf(after);
    if ( pfs < 0) return '';
    var lfs = after.length;
    var pts = s.length;
    if(before) {
      pts = s.indexOf(before, pfs+lfs);
      if( pts < 0) return '';
    }
    return s.substring(pfs + lfs, pts);
}

//folgende Zeilen dienen zur Demonstration der function string.afterbefore
var bodytext = "";
var p = unescape(location.search);
if (p =="") {
  p = "?rp=15&r4=89&p=123";
  bodytext = "Keine Zeichenkette hinter ? in URI, zur Demo '" + p + "'<br>"
}
p = p.afterbefore("?"); //alles in der Aufrufzeile hinter ?
p = "&" + p + "&";

bodytext += "Der erste Parameter ist:'" + p.afterbefore("&","&") + "'";
bodytext += "<br>Der zweite Parameter ist:'" + p.afterbefore("&").afterbefore("&","&") + "'";
bodytext += "<br>Der Parameter 'p' hat den Wert:'" + p.afterbefore("&p=","&") + "'";
//-->
</script>
</head>
<body>
<h1>Test String.prototype.afterbefore</h1>
<script type="text/javascript">
<!--
document.write(bodytext);
//-->
</script>
</body>
</html>


Bin dankbar für Feedback.
 
Code:
String.prototype.afterbefore= function(a, b) {
			var str = this;
			var af = str.search(new RegExp(a))+a.length;
			var be = str.search(new RegExp(b));
			return (str.substr(af, be-af));
		}
berücksichtigt keine falschen eingaben.
 
Code:
String.prototype.afterbefore= function(a, b) {
			var str = this;
			var af = str.search(new RegExp(a))+a.length;
			var be = str.search(new RegExp(b));
			return (str.substr(af, be-af));
		}
berücksichtigt keine falschen eingaben.

Ja, ok. 'str.search(new RegExp(b));' liefert aber ebenso nur die Position wie indexOf, nur vermutlich langsamer. Ich dachte mit meiner Bemerkung an str.match(), um alles mit einer Zeile zu erschlagen.
 
Sorry! Es geht doch.

Bsp.
Code:
		var regexp = "[0-9\.]+";
		var flags = "g";
		var string = "asd 12.5 asd12.8";
		var match = string.match(new RegExp(regexp, flags));
		alert(match);
 
Code:
String.prototype.afterbefore= function(a, b) {
	return(this.match(new RegExp(a+"(.*?)"+b))[1]);
}

Da hast du deine Funktion ABER sobald dort zeichen die in RegExp benutzt werden vorkommen, wird es nicht funktionieren.
 
@Junkee[], vielen Dank für deine Mühe. Ist eine interessante Lösung. Das Ganze in eine Funktion zu packen ist damit auch überflüssig, und dann hat man es ja in Bezug der Zeichen selbst in der Hand.
 
Zurück
Oben