[JavaScript] Problem mit substr();

WhiZZler

Chancentod²
ID: 85586
L
6 Mai 2006
588
32
begrüße

da es in js ja leider kein str_replace() gibt hab ich grade etwas probleme mit substr();

ich habe einen string "hit".. in diesem soll der text von "searchString" fett markiert werden..
Code:
var hit = 'example';
var searchString = 'xample';
var offset = hit.indexOf(searchString);
var name = hit.substr(0, offset) + '<b>' + hit.substr((offset), (offset + searchString.length - 1)) + '</b>' + hit.substr((offset + searchString.length), hit.length);

funktioniert so wunderbar.. wenn searchString allerdings e ist dann wird der erste buchstabe "verschluckt"
es würde also 'xample' in name stehen..

woran liegt das?

danke im vorraus
mfg
whizzler
 
ah.. ok.. hab ewig nach str_replace(); gegooglet und habe damit nur workarounds gefunden, die eh nicht so richtig funktionieren..

habe jetzt folgenden code:
Code:
var hit = 'example';
var searchString = 'e';
var regExp = new RegExp(searchString', "gi");
var name = hit.replace(regExp, '<b>' + searchString + '</b>');

das problem ist jetzt, dass beide e ersetzt werden.. ich erhalte also example.. ich möchte aber nur das erste e fett.. bei java würde ich replaceFirst nehmen, aber das gibt es in js ja auch nich..
ein weiteres problem ist, dass wenn ich nach 'A' suche, dann steht auch im ergebnis 'A'.. also 'exAmple'.. es sei denn ich mach den replace zwei mal und nimm den modifier 'i' raus.. aber da is dann auch wieder das problem, wenn nach mehreren zeichen gesucht wird.. deswegen muss ich glaub ich doch wieder auf die methode aus meinem anfangspost zurückgreifen.. ansonsten bekomme ich das mit der groß und kleinschreibung wohl nid in den griff (im eigentlich script wird der offset ermittelt, nachdem über hit und searchStr ein toLowerCase() lief)

hätte niemals gedacht, dass mich so ne kleinigkeit so lange aufhält, wo der rest eigentlich schon fertig ist ;)
 
Du hast dich mit den Offsets etwas vertan. Es wird immer Start,Länge und nicht Start,Ende angegeben.
Ich würde es so machen:
Code:
var hit = 'Dies ist ein Test';
var searchString = 'ist';
var offset = hit.indexOf(searchString);
if (offset >= 0) {
	// Treffer
	var name = hit.substr(0, offset) + '<b>' + hit.substr(offset, searchString.length) + '</b>' + hit.substr(offset + searchString.length, hit.length);
} else {
	// Kein Treffer
	var name = hit;
}
// document.write(name);
 
Probier mal:
PHP:
var hit = 'example',
    searchString = 'e',
    replace = '<b>$1</b>';
alert(hit.replace(new RegExp('(' + searchString + ')', 'i'), replace));
Der Parameter 'g' würde bewirken, dass alle e's ersetzt werden. Und die Gross/Klein-Problematik kriegste halt durch das Capturing innerhalb des regulären Ausdrucks in den Griff.
 
danke für die antworten!
habe es jetzt so gemacht, wie tleilax es vorgeschlagen hat.. bin offensichtlich weder in javascript noch in regulären ausdrücken fit..