2012-03-29 4 views
1

Ich fühle mich albern fragen, weil ich wette die Antwort starrt mich an, aber hier geht.Warum wird die Arbeit mit meinem Regex-Objekt nicht ersetzt, wenn der Test funktioniert?

Ich nehme eine Zeichenfolge aus dem CSS-Stil textDecoration und versuchen, den Unterstreichungsabschnitt der Zeichenfolge (und alle Leerzeichen um es) zu entfernen. Es gibt true zurück, wenn ich test() ausführe, aber wenn ich die replace-Methode mache, ist die Zeichenfolge unverändert. Hilfe?

Mein Code:

textDecoration = function(str) { 
      var n_str = str + '|/\s' + str + '|/\s' + str + '/\s|' + str + '/\s'; 
      var nre = new RegExp(n_str, "g"); 
      debug_log('Found or not: ' + nre.test(txt)); 
      txt.replace(nre, ''); 
      debug_log('Result: ' + txt); 
      debug_log('-----------------------'); 
    } 

    var txt = "underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "underline overline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline underline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline line-through underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 

Ausgang:

The output

Antwort

4

replace() eine neue Zeichenfolge mit dem Text ersetzt zurückgibt und nicht die tatsächliche Zeichenfolge ändern. Sie sollten so etwas wie tun:

var newString = txt.replace(nre, ''); 
debug_log('Result: ' + newString); 
+0

Ich bin peinlich ... Danke. Ich werde in T-Minus 8 Minuten akzeptieren. –

1

test gibt einen boolean. replace gibt eine neue Zeichenfolge zurück. Es ändert die Zeichenfolge nicht.

Auch Ihr regulärer Ausdruck ist ziemlich merkwürdig. Die Anwendung str = "underline", erhalten Sie:

/underline|\/sunderline|\/sunderline\/s|underline\/s/ 

die Whitespaces nicht übereinstimmt, aber "/s".

+0

Ich bin neu in Regex. Ich ging davon aus, dass "unterstreichen", "unterstreichen", "unterstreichen" und "unterstreichen" übereinstimmen würde. Liege ich falsch? –

+0

In Ihrer Zeichenfolge haben Sie den RegExp-Konstruktor angegeben, der s wurde mit Escapezeichen versehen (bis s), und davor steht ein Schrägstrich. Sie müssen den umgekehrten Schrägstrich vor dem s in der Zeichenfolge zurückgeben, um es zu einem Leerzeichen-Metazeichen für die Regexp zu machen. Auch sollten Sie nicht die Leerzeichen auf beiden Seiten von "Unterstreichung" löschen :-) – Bergi

+0

Oh, guten Ruf auf nicht beide Leerzeichen zu löschen! Wenn es die mittlere ist, hätte ich ein Problem. Ich werde ein wenig mehr suchen und herausfinden, wie ich diesen richtig entkommen kann. Vielen Dank für die Hilfe! –

Verwandte Themen