reaguläre Ausdrücke aus Perl -> in Javascript möglich?
Max
- javascript
0 Mathias Brodala0 Max0 Mathias Brodala0 Max
0 s.oliver
Hallo,
ich brobiere schon sein 3 Tagen ohne Erfolg. Ich möchte eine Sub aus Perl in Javascript Code umschreiben, aber es geht nicht.
sub TextCode ($) {
(my $string = shift) =~ s/(.|\n)/Code($1)/eg;
return $string;
}
function TextCode (string){
return string.replace(/(.|\n)/g, Code($1));
}
Ablauf:
-> ermittle Zeichen aus String
-> rufe Funktion "Code" auf mit gefundenen Zeichen
-> ersetze das gefundene Zeichen rückgabe von Funtkion "Code"
Wie geht das in Javascript mit /eg; ?
Wie erhalte ich eine Referenz auf das gefundene Zeichen? (in Perl mit $1)
Falls das überhaupt möglich ist
Danke und Tschüss
Hallo Max.
function TextCode (string){
return string.replace(/(.|\n)/g, Code($1));
}
Du musst „$1“ in einer Zeichenkette notieren, da es sonst als undeklarierte Variable angesehen wird.
-> ermittle Zeichen aus String
-> rufe Funktion "Code" auf mit gefundenen Zeichen
-> ersetze das gefundene Zeichen rückgabe von Funtkion "Code"
Funktioniert hier bei mir:
function TextCode (string){
return string.replace(/(.|\n)/g, Code('$1'));
}
function Code(s) {
return s += '-';
}
alert(TextCode('Foo')); // F-o-o-
Einen schönen Samstag noch.
Gruß, Mathias
Danke erstmal das habe ich nicht hinbekommen.
Aber dann ist $1 nicht das gefundene Zeichen sondern nur ein Platzhalter.
Wenn ich in Code ein alert mache dann kommt $1 und nicht der gefunden Buchstabe
function Code(s) {
alert(s);
return s += '-';
}
Die Code Funktion so zum Beispiel das machen:
function Code(s) {
if(s == "a") { return("#21"); }
if(s == "b") { return("#43"); }
if(s == "c") { return("#54"); }
...
}
Bracuht man da einen Zeiger auf Inhalt von $1 ?
Hallo Max.
Danke erstmal das habe ich nicht hinbekommen.
Aber dann ist $1 nicht das gefundene Zeichen sondern nur ein Platzhalter.
Ja, da hast du Recht. An Stelle der Backreference als Funktionsparameter musst du einfach nur eine Referenz auf die Funktion als Ersetzung angeben:
function TextCode (string){
return string.replace(/(.|\n)/g, Code);
}
function Code(s) {
alert(s); // Nacheinander: F, o, o
return s += '-';
}
alert(TextCode('Foo')); // F-o-o-
Einen schönen Samstag noch.
Gruß, Mathias
Servus,
nur mal als Hinweis:
<script type="text/javascript">
function bla ()
{
var string = 'Text';
// beachte, hier keine Argumente für zeigs_mir()
string.replace( /(.)/g, zeigs_mir );
}
function zeigs_mir ( a, b, c, d )
{
alert(
'Was ich finde: "' + a +
'"\nInhalt der ersten Klammer: "' + b +
'"\nStelle, an der ich es finde: "' + c +
'"\nDer gesamte String: "' + d + '"'
);
return a;
}
</script>
<input type="button" id="test" value="zeigs mir" onclick="bla();" />
JavaScript/ECMAScript unterstützt ab 1.2 die Flags 'i' und 'g', und
ab 1.5 'm'. Der benutzte Subsatz basiert auf Perl 5, bis auf einige
Einschränkungen bei Escapes, Lookarounds und den übrigen Perl-Flags
gibt es kaum Unterschiede.
Grüsse