Avatar billede zeusdk Nybegynder
17. februar 2003 - 22:54 Der er 6 kommentarer og
1 løsning

Udbyg reg.exp-script

Hej

Jeg har følgende script, som udbygges og/eller så skal der tilføjes flere udsagn til det.

form.beskrivelse.value = form.beskrivelse.value.replace( /(\.)([A-Z])/g, "$1 $2" );
form.beskrivelse.value = form.beskrivelse.value.replace( /(,)([a-z])/g, "$1 $2" );

Scriptet skal kunne gøre følgende:
1) Lav stort begyndelses-bogstav efter punktum.
2) Slet mellemrum før punktum, lav mellemrum efter punktumet OG det storte begyndelsesbogstav.
3) Slet mellemrum før komma, lav mellemrum efter komma.
Avatar billede jespernaur Nybegynder
17. februar 2003 - 23:38 #1
2/3 svar: Ændringerne herunder klarer 2) og 3)

form.beskrivelse.value =
      form.beskrivelse.value.replace( /\s*(\.)\s*([A-Z])/g, "$1 $2" );
form.beskrivelse.value =
      form.beskrivelse.value.replace( /\s*(,)\s*([a-z])/g, "$1 $2" );

Mvh
Jesper Naur
Avatar billede zeusdk Nybegynder
18. februar 2003 - 09:47 #2
Tak for det - komma-delen (punkt 3) fungerer fint, mens punkt 1 og 2 ikke fungerer (der sker intet).

Scriptet mangler at gøre:

1) Lav stort begyndelses-bogstav efter punktumet, hvis der findes et mellemrum mellem punktumet og det begyndelses-bogstav, som scriptet skal gøre stort.
2) Slet mellemrumet før punktumet, lav mellemrumet efter punktumet OG det storte begyndelsesbogstav (som ovenstående skabte).

Og så må scriptet gerne check om det sidste tegn i textarea'et "beskrivelse" er et punktum. Hvis ikke det er det, så skal den lave indsætte punktum til sidst. (Jeg forhøjer lige pointene til dig, fordi har udvidet opgaven lidt :-)
Avatar billede jespernaur Nybegynder
18. februar 2003 - 19:20 #3
Problem 1) er indtil videre uløst - det er ikke 'bare lige', men måske finder jeg en løsning.

Du har nok forsøgt nummer 2) med et lille bogstav efter punktummet og det vil ikke virke. Tilsvarende vil et stort bogstav efter komma få 3) til ikke at virke! Der skal /gi på begge udtryk for at komme uden om dette, altså:

form.beskrivelse.value =
      form.beskrivelse.value.replace( /\s*(\.)\s*([A-Z])/gi, "$1 $2" );
form.beskrivelse.value =
      form.beskrivelse.value.replace( /\s*(,)\s*([a-z])/gi, "$1 $2" );


Betinget tilføjelse af punktum til sidst:

if (!form.beskrivelse.value.match( /\.$/ )) {
  form.beskrivelse.value += ".";
}

Mvh
Jesper Naur
Avatar billede zeusdk Nybegynder
18. februar 2003 - 19:38 #4
Det virker smukt, men der mangler "bare", som du selv omtalte, at begyndelsesbogstavet bliver lavet stort. Det gør ikke noget, at der tilføjes nogle flere udtryk, hvis det kan hjælpe... du er eksperten :-)
Avatar billede zeusdk Nybegynder
18. februar 2003 - 19:42 #5
Sagt med andre ord, så kan en løsning, hvor flere udtryk sulplerer hinanden, værre lidt som godt, som et super-udtryk.
Avatar billede jespernaur Nybegynder
18. februar 2003 - 20:57 #6
Det endte med at blive noget mere besværligt end jeg først havde forventet, men det vi ser her klarer 1), 2), 3) og 4) i forening (jeg var nødt til at lave 1)-2) til en løkke, der tager 1 punktum ad gangen, da jeg ikke har fundet en måde i global replace at udføre yderligere kode for hver erstatning):

  var rx = new RegExp( "(.*?)\\s*(\\.)\\s*([A-Z])", "gi" );
  var result = "";
  var savlast;
  var str1 = form.beskrivelse.value;
  do {
      var matches = rx.exec( str1 );
      if (!matches) break;

      result += matches[1] + '. ' + matches[3].toUpperCase();
      savlast = rx.lastIndex;
  } while (1);

  form.beskrivelse.value = result + str1.substr(savlast);

  // Blanke før/efter kommaer
  form.beskrivelse.value =
        form.beskrivelse.value.replace( /\s*(,)\s*([a-z])/gi, "$1 $2" );


  // Betinget tilføjelse af punktum til sidst:

  if (!form.beskrivelse.value.match( /\.$/ )) {
      form.beskrivelse.value += ".";
  }

Mvh
Jesper Naur
Avatar billede zeusdk Nybegynder
18. februar 2003 - 21:01 #7
Wow, Wow, Wow! Det virker :-)

Det er blevet en stor kode, men det er underordnet, når problemstillingen er løst. Jeg takker mange gange :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester