2017-01-11 3 views
0

In JavaScript voraus, ich alle Vorkommen des folgendenRegex: eine Phrase passt, wenn nicht durch das Wort

initChart('something'); 
initMap('another'); 

initChart(); 
initMap(); 

entsprechen versuche, wenn sie durch das Wort ‚Funktion‘ vorangestellt ist, das heißt, nicht übereinstimmen

function initChart(param) { ... } 
function initMap(param) { ... } 

Grundsätzlich muss ich alle Vorkommen, die die Funktion aufrufen, entfernen, während die Funktionsdefinition intakt bleibt. Ich habe diese weit

/init.*(.*)/i 

Dies ist, was mein Skript aussieht Spiele Streifen aus:

var scriptRegex = /init.*(.*)/i; 
while (scriptRegex.test(responseHTML)) { 
    responseHTML = responseHTML.replace(scriptRegex, ""); 
} 

Aber ich bin fest, wie es zu sagen, „nur, wenn sie nicht durch das Wort vorangestellt ist "Funktion"

+0

Versuchen Sie mit einem Negate Regex wie^(?!. * -Funktion). * $ – kapricanon

+0

@ Kapriconon: Nein, es ist falsch. –

+0

Versuchen Sie '(?

Antwort

1

Das Problem ist, dass Javascript Regex nicht die Lookbehind-Funktion hat, so dass Sie nicht testen können, ob es das Schlüsselwort "function" nur mit regex. (und die meiste Zeit, wenn diese Funktion verfügbar ist, muss das Submuster im Lookbehind eine feste Breite haben, Dies bedeutet, dass Sie keine Fälle testen können, in denen der Funktionsname vom Schlüsselwort "function" mit einer unbekannten Anzahl von Leerzeichen getrennt ist.)

Sie benötigen also eine Problemumgehung. Sie können zum Beispiel Einfanggruppen nutzen zu wissen, ob es eine Keyword-Funktion ist, bevor Sie mit dieser Art von Muster:

/\b(?:(function)\s+)?(init\w*)\s*\(/ 

, wenn die erste Capture-Gruppe enthält „Funktion“ können Sie das Spiel ausschließen.

+0

Ich sehe was du sagst. Wie würde ich meinem Skript mitteilen, das erste Spiel auszuschließen, aber das zweite Spiel einzubeziehen? Ich habe meine Frage mit meinem Code aktualisiert, den ich zum Entfernen von Spielen verwende. – TetraDev

+0

@TetraDev; Du kannst deiner Regex nichts sagen. Testen Sie die erste Erfassungsgruppe und wenn sie keine "Funktion" enthält, nimmt sie die zweite Erfassungsgruppe. Wenn Sie das Muster für einen Ersatz benötigen, verwenden Sie eine Funktion als Ersatz dafür. –