|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
[javascript]Regular expression
Non riesco a capire come usare bene questo oggetto.
Io vorrei cercare in un testo una frase così composta: parola_1 parola_2 gruppo_numerico ad esempio: pippo pluto 10.103 però gli spazi potrebbero essere anche più di uno e la parola_2 potrebbe anche non esserci, ma vorrei essere sicuro che il gruppo_numerico sia dopo la parola_1, come potrei fare? Io ho provato così: Codice:
var str="ciao mondo 11100";
var reg=new RegExp("(ciao)\s+(mondo)*\s+(11100)","i");
alert(reg.test(str));
Da quel che ho capito \s sono gli spazi, + significa una o piò occorrenze e * significa zero o più occorrenze, giusto? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
funziona con:
ciao\s*[A-z]*\s*11100 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Prova questo:
Codice:
var str = "ciao mondo 11100";
var reg = new RegExp ("^(\\w+)\\s+((\\w+)\\s+)?(\\d+\\.?\\d+)$", "i");
if (reg.test (str))
{
var arr = reg.exec (str);
alert ("parte1 = [" + arr[1] + "]\r\n" +
"parte2 = [" + arr[3] + "]\r\n" +
"parte3 = [" + arr[4] + "]\r\n");
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
ho ancora qualche problemino, mettiamo che abbia una stringa così composta:
_blabla bl 123456 blaa_ciao mondo!_bla bla pappapero_ come faccio ad eliminare la parte di testo compresa fra i caratteri '_' senza che sappia com'è composta? ho provato un str.replace(/_.+_/i,"") ma mi cancella tutta la stringa! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
La soluzione è usare un quantificatore non greedy. str.replace(/_.+?_/gi,"") Il '?' rende il quantificatore non greedy, adesso cerca di catturare il minor numero di caratteri. Il flag 'g' serve per continuare nel replace, così non si ferma al primo match.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Grazie mille chiarissimo!
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Certo che è potente come cosa, con sti affari si riesce a fare quasi ogni tipo lavorazione sulle stringhe
ed è anche abbastanza veloce. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
se devo cercare una parola all'interno di una stringa che contiene molte righe, e ne devo ricavare la sola riga che contiene la parola come faccio?
ad esempio ho: _eijfjehbjcfrhguivrbjkvbjrkbcvrvucrubr CIAO rejfbeurbfierbfcirbgviyvryvrbhcr_ _urefgurigfurgfuirgfvurguivgruvgyrgvirgvuirgvuirurgvuirgvuirguivgruivgruvgruivuir_ _roivhruivgurrkjfrlihvrkgvurgvuigrvuigrviugruvgruvgurgvuigruivgruivgr_ e devo ricavare solo la prima riga perchè contiene la parola CIAO. Tutte le righe iniziano e finiscono con il medesimo carattere. ho provato con str.match(/_.+?CIAO.+?_/gi); ma mi da anche le altre righe... |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
bho a me nn funziona cmq ho risolto in un altro modo.
Ora mi serve l'ultimo ritocchino, presente i caratteri > < & " ecc ecc, che per scriverli in codice html vanno inseriti con > < " & ecco, se io ho una stringa con quei caratteri, c'è un modo per rimpiazzarli con il rispettivo codice asci tutti in una volta? es. var str=ciao "pippo" 10>5 avere ciao"pippo" 10>5 altrimenti dovrei fare tanti replace uno per ogni caso. Sto lavorando in javascript sempre |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
anche xkè i caratteri speciali sn questi:
Codice:
¢ = ¢ £ = £ ¤ = ¤ ¥ = ¥ ¦ = ¦ § = § ¨ = ¨ © = © ª = ª « = « ¬ = ¬ ® = ® ¯ = ¯ ° = ° ± = ± ² = ² ³ = ³ ´ = ´ µ = µ ¶ = ¶ · = · ¸ = ¸ ¹ = ¹ º = º » = » ¼ = ¼ ½ = ½ ¾ = ¾ ¿ = ¿ À = À Á = Á Â = Â Ã = Ã Ä = Ä Å = Å Æ = Æ Ç = Ç È = È É = É Ê = Ê Ë = Ë Ì = Ì Í = Í Î = Î Ï = Ï Ð = Ð Ñ = Ñ Ò = Ò Ó = Ó Ô = Ô Õ = Õ Ö = Ö × = × Ø = Ø Ù = Ù Ú = Ú Û = Û Ü = Ü Ý = Ý Þ = Þ ß = ß à = à á = á â = â ã = ã ä = ä å = å æ = æ ç = ç è = è é = é ê = ê ë = ë ì = ì í = í î = î ï = ï ð = ð ñ = ñ ò = ò ó = ó ô = ô õ = õ ö = ö ÷ = ÷ ø = ø ù = ù ú = ú û = û ü = ü ý = ý þ = þ ÿ = ÿ " = " & = & < = < > = > € = € ˆ = ˆ ˜ = ˜ … = … ™ = ™ |
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
... non ci sono funzioni "standard" per fare questo in Javascript. Fai tanti replace per ogni entità, almeno per le 5 entità "standard".Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ho ancora dei problemi uff...
Ho del testo con tante righe, tutte le righe iniziano con lo stesso gruppo di caratteri e finiscono tutte con lo stesso gruppo di caratteri, ma al loro interno possono avere qualsiasi carattere, anche dei tab, dei return ecc ecc. Es abc bla blakjhndefhnerhcf xejcengchr crjivhc iur vrcv rcvoirhciur zzz abc bla blakjhndefhnerhcf xejcengchr crjivhc iur vrcv rcvoirhciur zzz abc bla blakjhndefhnerhcf xe KEY hr crjivhc iur vrcv rcvoirhciur zzz abc bla blakjhndefhnerhcf xejcengchr crjivhc iur vrcv rcvoirhciur zzz a me interessa avere tutta la riga che contiene la parola KEY. se faccio un abc.+?KEY.+?zzz non funziona perchè come ho già detto possono esserci anche dei \n \r che il . non comprende... e in più non so per quale motivo ma mi prende dal primo abc che incontra fino a KEY Secondo me per questo genere di cose c'è un qualcosa di più avanzato. Non c'è qualcosa per dirgli, guarda il più vicino possibile alla parola KEY? |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
abc(?:.|[\r\n])+?KEY(?:.|[\r\n])+?zzz Il significato di (?:.|[\r\n]) è semplice: è un raggruppamento (senza capturing) di qualunque carattere oppure \r o \n
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma mi prende tutte le righe così xò
Ultima modifica di MEMon : 27-01-2007 alle 20:01. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
abc 11 xxx 111 zzz abc 22 KEY 222 zzz abc 33 yyy 333 zzz abc 44 KEY 444 zzz con il flag 'g' darebbe un array di 2 elementi, il primo prende le prime due righe e il secondo le altre due. Dopotutto, se accetti di poter avere in mezzo un newline, come farebbe a capire che vuoi solo: abc 22 KEY 222 zzz e non abc 11 xxx 111 zzz abc 22 KEY 222 zzz ? Bisognerebbe ragionarci un po' su .... non saprei ....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quindi se ho:
Codice:
abc jrfbekj rnfnrfnrfn rfcnr rornfr zzz abc rkfnrjfnrjnf lrfkrf KEY rkfnrl rnfkrnfr zzz |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ci sono riuscito! Ecco l'espressione:
abc((.|\r|\n)(?!abc))+?KEY(.|\r|\n)+?zzz da usare con il flag 'g' e da eseguire con il metodo match() di String.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
si c'ero arrivato anche io stamattina, xò mi sn accorto che il gruppo zzz a volte manca quindi il fine stringa diventa un abc.
Ho provato questo: abc((.|\n)(?!abc))+?KEY(.|\n)+?(zzz|abc) ma così torna a prendermi tutto... Per questo motivo sono passato allo split, in questo modo: var row=str.split("KEY"); var s1=row[0].split("abc")[1]; var s2=row[1].split(/abc|zzz/)[0]; var tot=s1+"KEY"+s2; ecco così funziona, ma a volte la parola KEY è presente più volte nella stessa riga, quindi ho fatto: var arr=str.split("KEY"); var s1=arr.splice(0,1)[0].split("abc")[1]; var s2=arr.join("KEY").split(/abc|zzz/)[0]; var tot=s1+"KEY"+s2; e così ho risolto ma ora è sensibilmente più lento l'algoritmo. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:31.











... non ci sono funzioni "standard" per fare questo in Javascript. Fai tanti replace per ogni entità, almeno per le 5 entità "standard".








