BSF: RegExp - »backreferences« in regulären Ausdrücken

Beitrag lesen

Hallo Peter,

das ist schon mal ganz dicht dran!
Allerdings habe ich in meinem String ausschließlich einzelne Hochkommata,
wenn ich also das hier --> str = "select xyz from table1 where col1 like "c%" and col2 like 'd%'";
in das hier --> str = "select xyz from table1 where col1 like 'c%' and col2 like 'd%'"; ändere, bekomme ich das -->
select xyz from table1 where col1 like LOWER('c%' and col2 like 'd%')
Hast Du da noch einmal einen Tip?

Vielen Dank schonmal für die Mühe, die Du Dir gemacht hast!

Gruss,

BSF

gruss BSF,

/*

gesucht werden sollen also alle durch einfache bzw. durch doppelte
  hochkommata eingefassten zeichensequenzen:

['"] - matched genau ein zeichen, welches entweder ein einfaches
  oder ein doppeltes hochkomma ist.
2)
  [^'"]* - matched genau keins, eins oder mehrere zeichen, die weder
  einfache noch doppelte hochkommata sind.
3)
  (['"]) - wie (1), nur das dieses zeichen auf einem internen ueber
  »1« zu adressierenden speicher abgelegt wird.
4)
  [^\1]* - wie (2), nur das hier schon mit der internen gerade unter
  (3) genannten referenz auf deas erste gematchte zeichen gearbeitet
  wird.
5)
  ([^\1]*) wie (4), nur das der ganze kram jetzt ebenfalls gespeichert
  wird - diesmal unter der internen referenz »2«.
6)
  \1 wie unter (1), nur das hier ebenfalls wieder mit der internen
  referenz, wie auch gerade unter (4) beschrieben, gearbeitet wird.

arbeitsprobe - bitte copy and paste unter [link:http://jconsole.com@title=jconsole.com]:
*/

var str, regX;

str = "select xyz from table1 where col1 like 'a%' and col2 like "b%"";
regX = (/(['"])([^\1]*)\1/g);

print(regX.test(str));
print(str.replace(regX, "LOWER($1$2$1)"));

str = "select xyz from table1 where col1 like "c%" and col2 like 'd%'";
regX = (/(['"])([^\1]*)\1/g);

print(regX.test(str));
print(str.replace(regX, (function () {
  return ("LOWER(" + arguments[1] + arguments[2] + arguments[1] + ")");
})));


>   
>   
> so long - peterS. - pseliger@gmx.net  
>   
>