Ich versuche, eine LESS Mixin schreiben, die Teil einer Zeichenfolge verwendet, um einen Klassennamen zu bilden. Ich erwartete, in der Lage zu sein, replace()
zu verwenden, um einen Wert für eine Variable zur Verfügung zu stellen, und dann die Variable in der Regel zu verwenden. Hier ist der Test, den ich schrieb, um zu überprüfen, dass es funktionieren würde:Verwirrt durch LESS replace() -Funktion Verhalten
.foo(@xyz) {
@pfx: replace(@xyz, "(.).*", "$1");
[email protected]{pfx}-foo { margin: 0; }
}
.foo(abcdefghijklmnop);
Wenn ich laufe, dass durch lessc (1.7.4) (bearbeiten - auch 2.1.0), es Art-of Werke, Erzeugen dies: So
.aaa-foo {
margin: 0;
}
, die replace()
zupft richtig das erste Zeichen ("a") von der Saite, die ich in geben, aber statt
.a-foo
es gibt mir
.aaa-foo
Ich habe für die replace()
Funktion an der Quelle sah und es ist schmutz einfach, so dass ich bin nur völlig verwirrt über das, was vor sich geht. (Ich habe die Regex als "^(.).*$"
mit dem gleichen Ergebnis ausprobiert.)
ich den Test erweiterte ein wenig:
.foo(@xyz) {
@pfx: replace(@xyz, "(.).*", "$1");
[email protected]{pfx}-foo { margin: 0; content: "@{pfx}"; }
}
.foo(abcdefghijklmnop);
, die mir gibt:
.aaa-foo {
margin: 0;
content: "a";
}
was bedeutet, dass der Regex ist funktioniert gut.
did '.foo (abcdefghijklmnop);' erzeugen '.aaa-foo'? –
@AmitJoki ja. Wenn ich es in '.foo (zebra)' ändere, gibt es mir '.zzz-foo'. – Pointy
@AmitJoki Ich möchte wirklich, dass es '.a-foo' ist - es sieht aus wie LESS intern die Variable den richtigen Wert gibt, aber wenn es die Variable in diesem bestimmten Kontext verwendet (einen Klassennamen in einem Selektor machen) wiederholt es der Wert so. Es ist komisch. – Pointy