Skocz do zawartości

[RegExp] Wyszukiwanie zmiennych tekstowych


dj.drezyna

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

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
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.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

  • 4 months later...

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.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...