Normal ifadeniz globalse ve yakalıyorsanız, o zaman exec kullanmalısınız. Maç tüm yakalamalarınızı geri getirmeyecek.
Maç, sadece eşleştirme (yakalama değil) için harika çalışıyor. Bir kez çalıştırırsınız ve tüm eşleşmelerin bir dizisini verir. (ancak normal ifade genel değilse, bu durumda eşleşme, eşleşmeyi ve ardından yakalamaları gösterir)
Yürütme, yakalarken kullandığınız şeydir ve her yürütüldüğünde maçı verir ve ardından yakalamalar gelir. (Eşleşme, yalnızca normal ifade global olmadığında tam eşleşmeyi takiben yakalamalar verecek şekilde davranacaktır).
Exec ile başka bir kullanım, bir eşleşmenin dizinini veya konumunu almaktır. Normal ifadeniz için bir değişkeniniz olduğunda, .lastIndex'i kullanabilir ve eşleşmenin konumunu alabilirsiniz. Bir normal ifade nesnesi .lastIndex'e sahiptir ve normal ifade nesnesi de .exec üzerinde yaptığınız şeydir. Nokta eşleştirme bir dizede yapılır ve bu durumda normal ifade nesnesi nokta lastIndex yapamazsınız
Bir dize, bir normal ifadeden geçen match işlevine sahiptir. Ve bir normal ifade, exec işlevine sahiptir ve bir dize geçirilir
exec birden çok kez çalıştırırsınız. bir kez koştuğun maç
Yakalama yapmadığınızda ve yakalarken eşleşmeyi kullanmak iyidir, bu daha güçlüdür, çünkü yakalamalar için iyidir, ancak yakalarken eşleşmeyi kullandıysanız, normal ifade global olmadığında yakalamaları gösterdiğine bakın. Normal ifade global olduğunda yakalamaları gösterme.
> "azb".match(/a(z)b/);
[ "azb", "z" ]
> "azb".match(/a(z)b/g);
[ "azb" ]
>
Başka bir şey de, eğer exec kullanırsanız, normal ifadede çağrılan not edin, o zaman normal ifade için bir değişken kullandıysanız, daha fazla gücünüz olur.
Değişkeni normal ifade için kullanmadığınızda eşleşmeleri elde edemezsiniz, bu nedenle, exec kullanırken normal ifade için değişkeni kullanın
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
>
> /[a-c]/g.exec("abc")
[ "a" ]
> /[a-c]/g.exec("abc")
[ "a" ]
>
> var r=/[a-c]/g
> r.exec("abc")
[ "a" ]
> r.exec("abc")
[ "b" ]
> r.exec("abc")
[ "c" ]
> r.exec("abc")
null
>
Ve exec ile, maçın "indeksini" alabilirsiniz
> var r=/T/g
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
2
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
6
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
9
> r.exec("qTqqqTqqTq");
null
> r.lastIndex
0
>
Dolayısıyla, dizinler veya yakalama istiyorsanız, o zaman exec kullanın (görebileceğiniz gibi, "dizin" ile birlikte verdiği "dizin" gerçekten n'inci bir oluşumdur, 1'den saymaktadır. Böylece doğru olanı türetebilirsiniz. 1'i çıkararak indeksleme. Ve gördüğünüz gibi 0 - lastIndex - 0 - bulunamadı.
Eşleşmeyi uzatmak istiyorsanız, onu yakalarken kullanabilirsiniz, ancak normal ifade global olduğunda kullanamazsınız ve bunun için yaptığınızda, dizinin içeriği tüm eşleşmeler değil, tamdır maç ve ardından yakalamalar.
exec
tüm alt seçimleri almak için birlikte dönersiniz.