2017-09-21 2 views
1

Ich versuche, einen Teil der Zeichenfolge zu extrahieren und ersetzen sie mit Regex in Javascript. zB:Extrahieren Sie nur einen Teil der Zeichenfolge mit Regex mit Javascript

var string = "application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1" 

Ich brauche

packet.vlan == 10 

mit

packet.vlan == VLAN-10 

Ich habe versucht, bei der nächstenfolgende

var regexp = /(\=.+)/g; 
string.replace(regexp, ("==" + "VLAN-10"); 

Auswahl haben zu ersetzen zu stoppen ist 10. Im Fall von zB oben muss die Auswahl vor dem Start von String ip gestoppt werden.

Antwort

1

Ihre Regex bedeutet "finde irgendein '=' Zeichen gefolgt von einem oder mehreren Zeichen."

Sie können sich https://regex101.com/ ansehen, die visuelle Möglichkeiten zum Debuggen von Regex bieten.

versuchen string.replace(/(packet\.vlan ==)(\d+)/, "$1VLAN-$2");

Hinweis: "string" für eine Variable ein wirklich schlechter Name.

+0

OP möchte nicht, dass 'packet.vlan' ersetzt wird, nur der Wert muss geändert werden. – Mouser

+1

@Mouser du hast Recht, ich musste meine Antwort zu aktualisieren :) – Apolo

0

Die Lösung ist Ihre regex neu zu schreiben:

var regexp = /(==\s)(.+\b)/g; //all chars from ==whitespace until next word boundery 
 
    var s = "packet.VLAN == 10".replace(regexp, "== VLAN-$2"); //$2 to refer to the capturing group 
 
    console.log(s);

jedoch mit diesem komplexen sql Strings würde ich andere JavaScript verwenden, um mehr Kontrolle zu gewährleisten. Werfen Sie einen Blick:

var SQLString = "application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1"; 
 

 

 
var edit = SQLString.split(/AND|OR/i); //split on and or 
 
var andOrs = SQLString.match(/AND|OR/ig); //create an array with and an or. 
 
edit.forEach(function(value, index, arr){ 
 
    //loop the array 
 
    var prop = value.substr(0, value.trim().search(/\s/)+1).trim(); //trim the whitespaces. 
 
    switch(prop){ 
 
     case "packet.vlan" : 
 
      arr[index] = "packet.vlan == VLAN-" +value.split("==")[1].trim(); 
 
     break; 
 
    } 
 
    
 
    //add the original and or to it. 
 
    andOrs[index] ? arr[index] = arr[index].trim() + " " + andOrs[index].trim() : null; 
 
}); 
 

 
SQLString = edit.join(" "); //join the array parts with a whitespace. 
 
console.log(SQLString);

Ein letzter Punkt. Ich bin neugierig, warum JavaScript benötigt wird, um SQL-Strings neu zu schreiben?

0

wie diese versuchen,

const regex = /packet.vlan == (\d+)/g; 
const str = `application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1`; 
const subst = `packet.vlan == VLAN-$1`; 

// The substituted value will be contained in the result variable 
const result = str.replace(regex, subst); 

console.log('Substitution result: ', result); 

Siehe regex: https://regex101.com/r/93AfJr/1

ODER

const str = `application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1`; 
var newstr = str.replace(/packet.vlan == 10/i, 'packet.vlan == VLAN-10'); 
console.log(newstr); 
1

Sie regex verwenden können, um die Zeichenfolge zu ersetzen, g Kennung in RegExp als global Spiel verwendet (Finde alle Übereinstimmungen, anstatt nach dem ersten Spiel anzuhalten.

var string = "application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1" 
 

 
var temp = new RegExp("packet.vlan == 10", "g"); 
 
console.log(string.replace(temp, "packet.vlan == VLAN-10"));

Um die nur das erste Vorkommen von packet.vlan == 10 mit VLAN-10 Sie .replace() verwenden können einfach zu ersetzen.

var string = "application == xyz AND location == abc AND packet.vlan == 10 OR ip == 1.1.1.1 AND packet.vlan = 11.1.1.1.11" 
 
console.log(string.replace("packet.vlan == 10", "packet.vlan == VLAN-10"));

+0

OP will nicht 'packet.vlan' ersetzt, nur der Wert muss geändert werden. – Mouser

+1

Aktualisierte Antwort :) –

0

Da ich die Zeichenfolge, die packet.xxx und ersetzen Sie es mit dem Wert finden hatte. Ich musste durchschleifen und die Zeichenfolge finden, die Paket enthält. und ersetzen Sie es mit Regex.

HINWEIS: In packet.xxx kann xxx ein beliebiger dynamischer Wert sein.

Verwandte Themen