Jump to content

[RegExp] Wyszukiwanie zmiennych tekstowych


Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

  • 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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...