Newsgroup: it.comp.lang.javascript
Titolo: RE match

ciao a tutti.
forse sbaglio io, ma la RE match non permette di sapere la posizione del
primo elemento cercato!
 var arr, re;
 re = /\//g;
 arr = Data.match(re);
alert(arr.lastIndex )  //torna la posizione dell'ultimo + 1
ma come faccio ad avere l'elenco di TUTTE le posizioni trovate?
col search trovo la prima... ma un bell'array completo, nessuno a
pensato di farlo restituire?
magari mi sbaglio.............
ciao
Daniele

Sinceramente anche a me match non è mai stato molto chiaro...da
documentazione Microsoft indica che restituisce un array con index, però non
mi ha mai funzionato...mah...
Io uso exec:
var Data="prova/prova2/e/prova/ultima!"; var re=/\//g; var arr;
while ((arr = re.exec(Data)) != null) document.write("Inizio:"+arr.index+"
Fine:"+arr.lastIndex+"<br>");

Credo di avere quel che ti serve, le spiegazioni di tutti i metodi e le
proprietà delle espressioni regolari (ma spiegate BENE...!) ivi inclusa la
funzione che resitituisce le posizioni dei match.
Ma è in inglese; comunque:
http://www.unitedscripters.com/spellbinder/regexp.html
ciao
Alberto

Infatti, qua dice:
match:
Its form is: STRING.match(RegExp)
namely in our case:
"Hallo folks, I said Hallo".match(/\w{5}/gi)
Do not be fooled by the fact I included a so to name it physical string
before it: it may hold a variable that holds as a value a string as well!
It returns either keyword null if no match was found, or an Array indexed
from zero onward, whose each entry is the text of the searched string.
E ok, restituisce un array dove ogni valore è il testo trovato...
solo che la documentazione di Microsoft parla di altro:
The array returned by the match method has three properties, input, index
and lastIndex. The input property contains the entire searched string. The
index property contains the position of the matched substring within the
complete searched string. The lastIndex property contains the position
following the last character in the last match.
Interessante che la nuova documentazione (5.6) parla di match SOLO per
windows scripting host...manco lo nomina per jscript! (la parte sopra
postata è tratta da jsdoc 5.5).

 manco lo nomina per jscript! (la parte sopra postata è tratta da jsdoc
5.5).
Veramente questo testo io lo ritrovo per JScript. Se guardi nella
documentazione, in alto, c'e' scritto i linguaggi di script a cui si
riferisce.
Stai facendo l'errore che molti fanno quando si incrociano con ASP la prima
volta: WSH e' un enviroment, non un linguaggio. Il linguaggio da usare in
tale Enviroment e' a tua discrezione (JScript, VBScript..) esattamente come
per ASP.
--------------------------------
Inviato via 
http://usenet.libero.it

no,no, nella 5.6 specifica "Visual basic scripting edition" con match (e fa
l'esempio solo per vbs), mentre p.e. con search specifica "Jscript".
Però, cercando "exec", mi "linka" a una pagina "match" dove effettivamente
parla di jscript...la cosa si fa intrigante (hanno fatto qualche casino nel
menù dell'help?)
Più interessante: qua la pagina dell'help per match - jscript (method):
Executes a search on a string using a regular expression pattern, and
returns an array containing the results of that search.
stringObj.match(rgExp) Arguments
stringObj
Required. The String object or string literal on which to perform the
search.
rgExp
Required. An instance of a Regular Expression object containing the regular
expression pattern and applicable flags. Can also be a variable name or
string literal containing the regular expression pattern and flags.
Remarks
If the match method does not find a match, it returns null. If it finds a
match, match returns an array, and the properties of the global RegExp
object are updated to reflect the results of the match.
The array returned by the match method has three properties, input, index
and lastIndex. The input property contains the entire searched string. The
index property contains the position of the matched substring within the
complete searched string. The lastIndex property contains the position
following the last character in the last match.
If the global flag (g) is not set, Element zero of the array contains the
entire match, while elements 1 - n contain any submatches that have occurred
within the match. This behavior is identical to the behavior of the exec
method without the global flag set. If the global flag is set, elements 0 -
n contain all matches that occurred.
Example
The following example illustrates the use of the match method.
function MatchDemo(){
   var r, re;         //Declare variables.
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/i;    //Create regular expression pattern.
   r = s.match(re);   //Attempt match on search string.
   return(r);         //Return first occurrence of "ain".
}This example illustrates the use of the match method with the g flag set.
function MatchDemo(){
   var r, re;         //Declare variables.
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/ig;      //Create regular expression pattern.
   r = s.match(re);   //Attempt match on search string.
   return(r);         //Return array containing all four
                      // occurrences of "ain".
}The following lines of code illustrate the use of a string literal with the
match method.
var r, re = "Spain";
r = "The rain in Spain".replace(re, "Canada");
E qua quella per l'oggetto Match (visual basic scripting edition):
Provides access to the read-only properties of a regular expression match.
Remarks
A Match object can be only created using the Execute method of the RegExp
object, which actually returns a collection of Match objects. All Match
object properties are read-only.
When a regular expression is executed, zero or more Match objects can
result. Each Match object provides access to the string found by the regular
expression, the length of the string, and an index to where the match was
found.
The following code illustrates the use of the Match object:
Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' Create variable.
   Set regEx = New RegExp   ' Create regular expression.
   regEx.Pattern = patrn   ' Set pattern.
   regEx.IgnoreCase = True   ' Set case insensitivity.
   regEx.Global = True   ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches   ' Iterate Matches collection.
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
C'è quantomeno poca chiarezza nella versione 5.6 (che ingloba in un unico
help jscript e vbscript); traducendo la parte sopra per jscript, forse, si
arriva al risultato dell'index inesistente di cui parla nel method jscript.

 arriva al risultato dell'index inesistente di cui parla nel method
jscript.
Mi sono perso, ma oggi sto un po' dormendo. Potresti essere piu' chiaro? :)
Inoltre, cosa c'entra questo con il fatto che WSH e' un Enviroment e non un
linguaggio, come ASP, e quindi le specifiche dei metodi si riferiscono a VBS
o JS e *non* possono riferirsi a WSH (tranne che per oggetti relativi
all'Enviroment, esattamente come per ASP)?


 all'Enviroment, esattamente come per ASP)?
Non c'entra nulla effettivamente...ho scritto wsh, intendevo la scritta
sopra "visual basic scripting edition"...capiscimi, siamo al penultimo
giorno di lavoro...

 giorno di lavoro...
Non dirlo a me: Son due gg che non dormo, e all'13 prendo la macchina per
scendere a FI.. Andro' avanti a caffe'..


 }
probabilmente sbaglio io ad interpretare; dalla function deduco quest'altra:
function MatchDemo(){
   var r, re; //Declare variables.
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/ig; //Create regular expression pattern.  <=NOTARE aggiunta del
global
   r = s.match(re); //Attempt match on search string.
   return(.....);
}
Ora:
 return r.length => 4
 return r[0] => ain (idem per le altre posizioni nell'array);
 return r.index => 40 (ultima occorrenza?)
 returnr r[0].index => undefined
Forse non capisco bene cosa significa "The array returned by the match
method has three properties, input, index and lastIndex"...e non capisco
neanche come è fatto questo array...
Io mi aspetto "per ogni posizione nell'array ho 3 properties".

 ha scritto nel messaggio
news:atumt5$2rlgr$1...@ID-147253.news.dfncis.de...


Tutto esatto; anche io uso exec...
La curiosità era: perché Microsoft, nella sua documentazione ufficiale, si
ostina a scrivere 'sta roba, visto che è errata?
Quando la ho letta la prima volta ci ho perso sù un po' di tempo, poi ho
dedotto che la doc. era sbagliata; ma poi me lo sono ritrovato anche nelle
doc. successive, e ho cominciato a pensare "dove sto sbagliando"?
In realtà non stavo sbagliando, è solo che mamma Microsoft erra e sta
errando da tempo (parlo della doc. in oggetto, anche se l'affermazione direi
che è estendibile...)