Aktywne Wpisy

rancorn +25
"słyszałeś że pisarski napisał książkę?
Słyszałem.
A czytałeś?
Nie.
Jak wiekszosc.
*SMIECH PAWIANA*
Słyszałem.
A czytałeś?
Nie.
Jak wiekszosc.
*SMIECH PAWIANA*
źródło: 1000053392
Pobierz
Napiszcie mi coś sympatycznego.





- X SEPARATOR Y (bez spacji, dałem je, żeby było czytelniej) gdzie X jest licznikiem, SEPARATOR to pewien string rozdzielający, a Y mianownikiem
- X SEPARATOR Y SEPARATOR Z (również bez spacji) gdzie X to część całkowita, Y to licznik, a Z to mianownik.
Mogą się pojawić obie notacje, wszystko zależy od tego czy pojawią się ułamki z częścią całkowitą czy nie. Ten ciąg będzie wkładany do parsera matematycznego i on oczekuje że przyjdzie to w postaci:
- fraction(x,y) gdzie x jest licznikiem a y mianownikiem
- fraction(x,y,z) gdzie x jest częścią całkowitą, y licznikiem, z mianownikiem.
Teraz tak, oczywistym jest, że "drugi człon" pojawi się zawsze, bowiem ułamek zawsze ma licznik i mianownik - nie zawsze pojawi się liczba całkowita. Póki co zamieniam to w taki sposób, że mam 2 regexpy, jeden dla ułamków z liczbą całkowitą
new RegExp('(\d+)' + FRACTION_SEPARATOR + '(\d+)' + FRACTION_SEPARATOR + '(\d+)', 'g');i drugi dla tych bez
new RegExp('(\d+)' + FRACTION_SEPARATOR + '(\d+)', 'g');i zamieniam to w dwóch turach, najpierw te z liczbą całkowitą
'fraction($1, $2, $3)'a potem bez
'fraction($1, $2)'Pytanie brzmi, czy da radę to zrobić jednym regexpem? Problem jest taki, że o ile mogę zaznaczyć w regexpie żeby pierwsza część była opcjonalna, o tyle nie wiem jaki dać string transformujący, skoro $3 nie zawsze istnieje #programowanie #regexp i jeszcze #javascript bo rzecz dzieje się w JSie
Tzn coś w stylu:
X1 SEPARATOR Y1 + X2 SEPARATOR Y2Zakładając, że separatorem jest '/'
(?:(\d+)/)?(\d+)/(\d+)(?!/)
W pierwszej grupie zawsze będzie część całkowita, w drugiej licznik, w trzeciej mianownik. Czysty regex, bo nie znam JS :P
@wicikumoza: (#) Okej, ale bardziej mnie chodzi jak to teraz zamienić :D bo mam 2 różne ciągi,
fraction($1, $2)jak zamieniam ułamek
fraction($1,$2,$3)mogę skonstruować w jakiś sposób, żeby drugi przecinek i $3 pojawiały się tylko wtedy, gdy $3 istnieje. Nie znam się na regexpach aż tak, nie wiem czy jest na to jakaś składnia.
var fractionWithoutInteger = new RegExp('(\d+)' + FRACTION_SEPARATOR + '(\d+)', 'g');var fractionWithInteger = new RegExp('(\d+)' + FRACTION_SEPARATOR + '(\d+)' + FRACTION_SEPARATOR + '(\d+)', 'g');var transformedExpression = expression.replace(fractionWithInteger, 'fraction($1,To może krótsze (i bardziej nieczytelne :P)?
@wicikumoza: (#) Również dziękuję