2016-10-25 2 views
1

Hallo, ich versuche eine Regex zu schreiben, um Auftreten des Zellennamens in einer Excel-Formeln durch einen Alias ​​anstelle des Blattnamens zu ersetzen. Ich verwende Js XLS zum Parsen von Excel. ex:Regex Excel Formel mit Blattname ersetzen

+AA74/AVERAGE('b'!Z40:AA40) 

Ausgabe Erforderlich

+a_AA74/AVERAGE(b_Z40:b_AA40) 

aktuelle Ausgabe

+a_AA74/AVERAGE(b_Z40:a_AA40) 

wo 'a', in dem das aktuelle Blatt ist Formeln geschrieben und 'b' ist der Name des andere Blatt.Ich möchte den Blattnamen vor jedem Zellennamen anfügen. Aber in dieser Art von Formel Bereich Formel sollte Startbereich Blattnamen enthalten.

aktuellen Code Ich bin mit

var re = new RegExp("A.","g"); 
res = res.replace(re, "a_"); 
var re = new RegExp("A!","g"); 
res = res.replace(re, "a_"); 
var re = new RegExp("'B'!","g"); 
res = res.replace(re, "b_"); 
var re = new RegExp("'B'.","g"); 
res = res.replace(re, "b_"); 
res = res.replace(/\s/g,""); 
res = res.replace(/(^|[^_A-Z])([A-Z]+\d+)/g, "$1"+'a_'+"$2"); 
+0

Bitte überprüfen Sie https://jsfiddle.net/33bxwc2c/ und lassen Sie mich wissen, ob dies für Sie funktioniert. –

+0

danke es ist was ich suche. – axcl

Antwort

1

Sie

verwenden

var re = /^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+)/g; 
 
var s = "+AA74/AVERAGE('b'!Z40:AA40)"; 
 
var res = s.replace(re, function(m, g1, g2) { 
 
    if (g1) { 
 
    \t return 'b_'+g1 + ":b_" + g2; 
 
    } else return '+a_A'; 
 
}); 
 
console.log(res);

Die ^\+A!?|'b'!([A-Z]+\d+):([A-Z]+\d+) regex Spiele:

  • ^\+A!?-+A oder +A! zu Beginn der Zeichenfolge
  • | - oder
  • 'b'! - eine Folge von wörtlichen Zeichen
  • ([A-Z]+\d+) - Gruppe 1 Capturing 1+ Groß ASCII Zeichen gefolgt mit 1+ Ziffern
  • : - ein Doppelpunkt
  • ([A-Z]+\d+) - Gruppe 2 Capturing 1+ Groß ASCII Zeichen gefolgt mit 1+ Ziffern

In der Ersetzung überprüfen wir, ob die Gruppe 1 übereinstimmt (= an der Partie teilgenommen hat). Wenn ja, fügen wir b_ zu den erfassten Inhalten hinzu, wenn nicht, fügen wir einfach a_ zu A hinzu.