2017-12-23 19 views
0

Ich machte eine Funktion, um eine Zeichenfolge zu brechen, um es in Teile zu brechen. Ich las auf MDN, dass Regex in Klammern setzen könnte ich später verweisen, indem Sie $1 verwenden, aber aus irgendeinem Grund funktioniert mein Code nicht. Ich möchte diese Funktion 'url this' zurückgeben, aber es ist '$ 1his' zurückgeben.Javascript Regex-Code funktioniert nicht wie erwartet

Bitte Hilfe!

const someFunction = str => { 
 
return str.replace(/([A-Z]+)/g,('$1'.slice(0,-1).toLowerCase() + ' ' + '$1'.slice(-1).toLowerCase())); 
 
    } 
 
console.log(someFunction('URLThis'))

+1

Sie sind verwirrt. Funktionsargumente werden vor dem Aufruf der Funktion ausgewertet. ''$ 1'.slice (0, -1)' ist nur '$'. – melpomene

+0

@melpomene Also, was soll ich tun, um es zu referenzieren? –

Antwort

2

Sie können Funktion im zweiten Parameter zu string#replace passieren.

const someFunction = str => { 
 
return str.replace(/[A-Z]+/g, (match) => { 
 
    return match.slice(0,-1).toLowerCase() + ' ' + match.slice(-1).toLowerCase(); 
 
}); 
 
} 
 
console.log(someFunction('URLThis'))

+1

Sie brauchen die Capturing Parens dort nicht einmal. – melpomene

1

Sie werden für die Manipulation des Ergebnisses des Ersatzes eine Funktion als zweiten Parameter verwenden wollen. Von MDN String.prototype.replace():

Weil wir das Ergebnis des Spiels vor die endgültige Substitution wird weiter verwandeln wollen, müssen wir eine Funktion verwenden. Dies erzwingt die Auswertung der Übereinstimmung vor der toLowerCase() - Methode. Wenn wir versucht hätten, dies mit der Übereinstimmung ohne eine Funktion zu tun, hätte toLowerCase() keine Wirkung.

Dies liegt daran, ‚$ &‘ .tolowercase() würde zunächst als Stringliteral (was in dem gleichen ‚$ &‘) vor der Verwendung der Zeichen als Muster ausgewertet werden.

Verwandte Themen