Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » GREP in string Variablen

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

18. Nov 2020, 23:51
Bewertung:

gelesen: 12207

Beitrag als Lesezeichen
Hallo,
das dürfte für euch nur ein Klacks sein für mich ist es ein Berg:

Ich möchte in einem string eine grep-suche und ersetzung durchführen:

Es sollen alle Vorkommen des Rufzeichens in diesem String durch 1 ersetzt werden
Code
var _sel = app.selection[0]; 


var _pr = _sel.contents;
var pstr = _pr.toString();
var p_clean = pstr.replace("-", "00"); // Das funktioniert
p_clean = pstr.replace("!"\+, "1"); // Das funktioniert nicht


Doch leider funktioniert das nicht. Habt ihr eine Idee?

Vielen Dank im Voraus.
LG faxinger

GREP in string Variablen

WernerPerplies
Beiträge gesamt: 2763

19. Nov 2020, 07:37
Bewertung: ||

gelesen: 12174

Beitrag als Lesezeichen
Moin Faxinger,

so vielleicht?

Code
/ insert at start of Script	 
String.prototype.allReplace = function(/*string*/search, /*String*/replace)
{
return this.replace(new RegExp (search, "g"),replace);
}

// test
alert("test!!!!--!!ende".allReplace("!","1"));


Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

GREP in string Variablen

Thomas Richard
Beiträge gesamt: 19339

19. Nov 2020, 11:48
Bewertung:

gelesen: 12117

Beitrag als Lesezeichen
Zitat "!"\+


Das findet wohl alle Vorkommen von !\+

Was du wünschst, dürfte eher mit
Code
"!“+, "1" 

zu erreichen sein.


MfG

Thomas


Und wenn dir geholfen wurde, hilf uns, dies auch weiterhin zu können.
http://www.hilfdirselbst.ch/info/

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 20:30
Bewertung:

gelesen: 11971

Beitrag als Lesezeichen
Hallo Thomas,

danke für deine Antwort, aber genau das funktioniert eben nicht:

Code
 
var str = "djlsaöj jlkö k !!! !! dlöfökgsä!!! ädöfslä# ! "
var str_clean = str.replace("!"+, "1" ); // Das funktioniert nicht

alert (str_clean);

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 20:35
Bewertung:

gelesen: 11970

Beitrag als Lesezeichen
Hallo Werner,

vielen Dank für deine Antwort. Ja das skript funktioniert. Allerdings bin ich mit Funktionen noch nicht so firm.

Der Name der Funktion ist allReplace oder string.prototype.allReplace?

LG
faxinger

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 20:52
Bewertung:

gelesen: 11955

Beitrag als Lesezeichen
Hallo Werner,

noch eine Zusatzfrage, kann man in der Funktion auch gleich mehrere Suchen/Ersetzen kombinieren?

In der Art
Code
alert("test!!!!-&-!! & && !&!ende".allReplace("!","1"),("&","6")); 

Bzw. Suchen/Ersetzen-Paare definieren und dann die Funktion aufrufen?

Danke
LG
Faxinger

(Dieser Beitrag wurde von faxinger666 am 19. Nov 2020, 20:54 geändert)

GREP in string Variablen

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2020, 21:07
Bewertung: |||

gelesen: 11941

Beitrag als Lesezeichen
Hallo faxinger,

versuch mal das:

Code
var str = "djlsaöj jlkö k !!! !! dlöfökgsä!!! ädöfslä# ! " 
var str_clean = str.replace(/\!/g, '1'); // Das funktioniert nicht

alert (str_clean);


Viele Grüße
Martin


GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 21:49
Bewertung:

gelesen: 11914

Beitrag als Lesezeichen
Hallo Martin,

ja perfekt so gehts!
Und mit mehreren S/E hintereinander funkt es auch!
Toll

Vielen Dank
und schönen Abend

Faxinger

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 22:03
Bewertung:

gelesen: 11890

Beitrag als Lesezeichen
Hallo Martin,
sorry, es geht leider doch nicht:
Code
var str = "djlsaöj jlkö k !!! !! dlöfökgsä!!! ädöfslä# ! "  
var str_clean = str.replace(/\!/g, '1');
var str_clean = str.replace(/\"/g, '2');
alert (str_clean);

anscheinend muss das " maskiert werden aber dann funktioniert die Ersetzung !->1 auch nicht mehr.

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 22:06
Bewertung:

gelesen: 11882

Beitrag als Lesezeichen
Hallo,
das Ziel sind folgende Ersetzungen:
! -> 1
" -> 2
§ -> 3
$ -> 4
% -> 5
& -> 6
/ -> 7
( -> 8
) -> 9
= -> 0
- -> 00

Ich tu mir da leider etwas schwer mit den Maskierungen der Sonderzeichen...

GREP in string Variablen

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2020, 22:08
Bewertung: |||

gelesen: 11879

Beitrag als Lesezeichen
Zum Hintergrund siehe z.B. JavaScript String replace() Method

Der replace()-Befehl erwartet
a) einen String oder
b) einen regulären Ausdruck.

Deine Versuchsanordnungen waren mit einem String aufgebaut. Aber damit bekommst Du keine Wiederholungen zum Greifen:
Zitat If you are replacing a value (and not a regular expression), only the first instance of the value will be replaced.


Und weiter
Zitat To replace all occurrences of a specified value, use the global (g) modifier.


Struktur des regulären Ausdrucks beim replace()-Befehl:
Code
/[Ausdruck]/[Modifikator] 

/\!/gi


Da das Ausrufezeichen bei regulären Ausdrücken als Negation dient, muss es mit einem Backslash escaped werden, wenn es als Ausrufezeichen verwendet werden soll.

g und i sind Modifikatoren.
g steht für global - alle und nicht nur die erste gefundene Stelle ändern;
i steht für case insensitive (Groß-/Kleinschreibung nicht beachten).

Beide Modifikatoren sind optional, können verwendet oder nicht verwendet werden.

Viele Grüße
Martin


GREP in string Variablen

WernerPerplies
Beiträge gesamt: 2763

19. Nov 2020, 22:09
Bewertung: |||

gelesen: 11877

Beitrag als Lesezeichen
Hallo Faxinger,

Code
/ insert at start of Script	  
String.prototype.allReplace = function(/*string*/search, /*String*/replace)
{
return this.replace(new RegExp (search, "g"),replace);
}


Mit [Object].prototype.methodenName kannst Du einem beliebigem JavaScript-Objekt eigene Funktionalitäten zuweisen.

Solch eine Prototyp-Zuweisung musst Du einmalig aufrufen, bevor Du sie beliebig oft im Skript benutzen kannst.

In diesem Fall kapsel ich einfach einen Regex-Ausdruck.

Das vereinfacht ein wenig die Schreibweise des Suchausdrucks.

Der Aufruf erfolgt durch den Methodennamen und kann natürlich beliebig oft hintereinander aufgerufen werden.

Die aufrufen werden dann von links nach rechts abgearbeitet:

alert("!.:;".allReplace("!","1").allReplace("\\.","2").allReplace(":","3").allReplace(";","4")); --> "1234"

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

GREP in string Variablen

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2020, 22:13
Bewertung:

gelesen: 11871

Beitrag als Lesezeichen
Hallo Faxinger,

versuch es so
Code
var str = 'djlsaöj jlkö k !!! !! dlöfökgsä!!! ädöfslä# " "   "! '; 
var str_clean = str.replace(/\!/g, '1');
str_clean = str_clean.replace(/\"/g, '2');
alert(str_clean);


Wichtig ist, dass Du beim zweiten Mal den replace-Befehl nicht mehr auf str, sondern auf str_clean anwendest.

oder kaskadierend:
Code
var str = 'djlsaöj jlkö k !!! !! dlöfökgsä!!! ädöfslä# " "   "! '; 
var str_clean = str.replace(/\!/g, '1').replace(/\"/g, '2');
alert(str_clean);


Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 19. Nov 2020, 22:21 geändert)

GREP in string Variablen

Martin Fischer
  
Beiträge gesamt: 12783

19. Nov 2020, 22:28
Bewertung:

gelesen: 11855

Beitrag als Lesezeichen
So

Code
var str = '!"§$%&/()-'; 
var str_clean = str.replace(/\!/g, '1');
str_clean = str_clean.replace(/\"/g, '2');
str_clean = str_clean.replace(/§/g, '3');
str_clean = str_clean.replace(/\$/g, '4');
str_clean = str_clean.replace(/%/g, '5');
str_clean = str_clean.replace(/\&/g, '6');
str_clean = str_clean.replace(/\//g, '7');
str_clean = str_clean.replace(/\()/g, '8');
str_clean = str_clean.replace(/\)/g, '9');
str_clean = str_clean.replace(/-/g, '00');
alert(str_clean);


oder so

Code
var str = '!"§$%&/()-'; 
var str_clean = str.replace(/\!/g, '1')
.replace(/\"/g, '2')
.replace(/§/g, '3')
.replace(/\$/g, '4')
.replace(/%/g, '5')
.replace(/\&/g, '6')
.replace(/\//g, '7')
.replace(/\()/g, '8')
.replace(/\)/g, '9')
.replace(/-/g, '00');

alert(str_clean);


Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 19. Nov 2020, 22:30 geändert)

GREP in string Variablen

WernerPerplies
Beiträge gesamt: 2763

19. Nov 2020, 22:39
Bewertung: |||

gelesen: 11832

Beitrag als Lesezeichen
oder so:
Code
// insert at start of Script	  
String.prototype.allReplace = function(/*string*/search, /*String*/replace)
{
return this.replace(new RegExp (search, "g"),replace);
}
alert("!\"§$%&/()=-".allReplace("!","1")
.allReplace("\"","2")
.allReplace("§","3")
.allReplace("\\$","4")
.allReplace("%","5")
.allReplace("&","6")
.allReplace("/","7")
.allReplace("\\(","8")
.allReplace("\\)","9")
.allReplace("=","0")
.allReplace("-","00"));

:-)

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

GREP in string Variablen

faxinger666
Beiträge gesamt: 167

19. Nov 2020, 22:46
Bewertung:

gelesen: 1916

Beitrag als Lesezeichen
Hallo Martin, hallo Werner,

vielen vielen Dank für eure ausführlichen und eklärenden Antworten. Das hilft mir sehr weiter.

Jetzt funktioniert alles so wie es soll.

Danke

Schönen Abend noch.
LG
Faxinger