2009-07-14 4 views
1

Ich starre leer auf diesen Fehler, so hoffe ich hier jemand kann darauf hinweisen, wo ich falsch liege.Syntaxfehler mit Look-Behind-Assertion in Javascript regulären Ausdruck

Diese Funktion den Wert eines Parameters in einem Abfragezeichenfolgeflag mit einem neuen Wert ersetzen soll:

function ReplaceParameter(querystring, key, value) { 
    var myregexp = new RegExp("(?<="+key+"=).+(?=&)", "i"); 
    return querystring.replace(myregexp, value); 
} 

Beispiel Nutzung:

var serializedData = "columnsToDisplay=EmployeeId&columnsToDisplay=Name&columnsToDisplay=Birthday&columnsToDisplay=Phone&pageSize=4&columnToSort=EmployeeId&descending=False&page=1&partial=RainbowGridData"; 
var selectedPage = 17; 
serializedData = ReplaceParameter(serializedData, "page", selectedPage); 

Ich erhalte eine „Microsoft JScript-Laufzeitfehler: Syntaxfehler in regulären Ausdruck "Fehler." Trog Visual Studio während des Debuggens auf dieser Website.

Jede Idee?

Danke.

Antwort

4

Ich denke, der reguläre Ausdruck von JavaScript unterstützt Look-Behind-Assertions nicht. So versuchen Sie dieses stattdessen:

function ReplaceParameter(querystring, key, value) { 
    var myregexp = new RegExp("((?:^|&)"+encodeURIComponent(key)+")=[^&]*", "i"); 
    return querystring.replace(myregexp, "$1="+encodeURIComponent(value)); 
} 
+0

Oh ich sehe. Regexbuddy hat mich davor nicht gewarnt ... ;-) danke für die Antwort, es funktioniert. –

+0

FYI ich googelte und Lookaheads sollten in Javascript arbeiten. –

+1

Gute Antwort. Sie sollten den "Wert" wahrscheinlich auch vor dem Platzieren in der Abfragezeichenfolge url-encodieren. – Prestaul