Skocz do zawartości
Forum Programowanie
Zaloguj się, aby obserwować  
dj.drezyna

[RegExp] Wyszukiwanie zmiennych tekstowych

Polecane posty

Witam!

 

Chciałbym wyszukiwać zmienne tekstowe w kodzie np. JavaScript, a nie jestem w stanie wymyślić do tego sposobu. Myślałem o pętli przechodzącej przez wszystkie linie i znaki danej linii ale nie jest to metoda idealna o czym dalej. Natomiast zupełnie nie mam pomysłu na jakąś formułę w RegExp, bo tutaj to nie działałoby w ogóle, bo np: /\'\.'/g zupełnie nie jest właściwe, ponieważ przy czymś takim jak: 'jestem Hand\'ym' nie działa.

 

A co do sposobu pętli jest okej:

var wynik = '';
var typ;
var i = 0;
var linie = document.getElementById('tekst').value.split("\n");
for (var linia=0;linia<linie.length;linia++) {
linie[linia] = ' '+linie[linia]+' ';//nowa linia
wynik += "\n"+linia+':';
var jeden = linie[linia].indexOf('\'');
var dwa = linie[linia].indexOf('\"');
if (((jeden < dwa) && (jeden > -1) && (dwa > -1)) || ((jeden > -1) && (dwa == -1)))
typ = 'jeden';
else
typ = 'dwa';//alert(jeden+' '+dwa);
for (var znak=0;znak<linie[linia].length;znak++) {
if ((typ == 'jeden') || (typ == '')) {
if ((linie[linia][znak] == '\'') && ((linie[linia][znak-1] != '\\') || (linie[linia][znak+1] == '\''))) {
i++;
typ = 'jeden';
wynik += znak+',';
if (i == 2) {
typ = '';
i = 0;
}
}
}
if ((typ == 'dwa') || (typ == '')) {
if ((linie[linia][znak] == '\"') && ((linie[linia][znak-1] != '\\') || (linie[linia][znak+1] == '\"'))) {
i++;
typ = 'dwa';
wynik += znak+',';
if (i == 2) {
typ = '';
i = 0;
}
}
}
}
}
alert(wynik);

ale nie zupełnie niestety, bo zapis:

var ok = ''; nie wywoła błędu ale poprawny ze względu na składnię js zapis:

var a = '\\'; //wpisane: \

lub

var b = 'jestem sobie tekst \\'; //wpisane: jestem sobie tekst \

lub

var c = 'jestem sobie tekst \\', a może nie\\'; // wpisane: jestem sobie tekst ', a może nie\

spowoduje zapis jedynie pierwszego apostrofu, a drugi zostanie pominięty, bo znak \' nie zamyka instrukcji, a tu jednak tak. I w tym momencie nie wiem jak sobie poradzić.

Coś mi podpowiada mimo to, że najlepiej do tego nadałoby się jednak wyrażenie regularnie ale nie jestem w stanie go napisać.

 

Bardzo dziękuję za czas poświęcony na zapoznanie się z postem,

pozdrawiam,

Marek

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Znalazłem coś takiego w internecie:

/'[^'\\]*(?:\\.[^'\\]*)*'/

Działa ale marzy mi się zrozumienie jak działa te wyrażenie. Mógłby ktoś opisać co za co jest odpowiedzialne, bo ja np. nie rozumiem jak może znależć ciąg 'abc\'e' prawidłowo (a znajduje) bo przecież jest zaprzeczenie w postaci: [^'\\]

 

Bardzo byłbym wdzięczny.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na początku znajduje apostorf, potem szuka znaków innych niż odwrotny ukośnik lub innych niż apostrof. (apostrof kończy łańcuch o ile nie jest poprzedzony znakiem uniku odwróconego ukośnika). Wyszukuje też wyrażeń uniku w postaci odwrotnego ukośnika i dowolnego znaku i jeśli jest - innego lub więcej znaków rożnych od znaku apostrofu lub znaku odwróconego ukośnika.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×