StringScanner bir ipe sözlü tarama işlemleri için sağlar tokenizer basit bir dizedir. Bu bir JavaScript liman var aynı adı taşıyan Ruby kütüphanesi .
Bir dize tarama kayıtlarını tutmak ve bir pozisyon (kaynak dizeye bir sıfır tabanlı dizin) ilerleyen ve pozisyon sonra kaynak dizenin kısmı karşı düzenli ifadeler uyan anlamına gelir.
StringScanner yazılmıştır CoffeeScript ve üzerinden dağıtılan npm bir olarak CommonJS modülü .
GitHub de klon, çatal, veya dosya hataları .
Hızlı başlangıç
 $ npm install strscan $ node-repl > var StringScanner = require("strscan").StringScanner > var s = new StringScanner("This is a test") > s.scan(/\w+/)
# => "This" > s.scan(/\w+/)
# => null > s.scan(/\s+/)
# => " " > s.scan(/\s+/)
# => null > s.scan(/\w+/)
# => "is" > s.hasTerminated()
# => false > s.scan(/\s+/)
# => " " > s.scan(/(\w+)\s+(\w+)/)
# => "a test" > s.getMatch()
# => "a test" > s.getCapture(0)
# => "a" > s.getCapture(1)
# => "test" > s.hasTerminated()
# => true
|
|
Bir tarayıcı oluşturma
|
|
#
Yeni oluşturma StringScanner kaynağı dizesi ile. |
(Ihracat? Bu). StringScanner = sınıf StringScanner
yapıcı: (kaynak) ->
@ Kaynak = kaynak. ToString ()
@ Reset ()
|
#
Maçları için Tarama
scan , scanUntil , scanChar , skip ve skipUntil yöntemleri eşleşen dizeleri aramak ve tarayıcının konumunu ileriye atamak için. Tarama yöntemleri eşleşen dizeyi döndürür; atlama yöntemleri tarama pozisyonu gelişmiş hangi karakter sayısını döndürür.
|
|
#
Maçlar regexp mevcut konumda. Eşleşen dize ve gelişmeler tarayıcının konumunu veya döner döner null eşleşme varsa. |
Tarama: (regexp) ->
(karşılaşmalar = regexp. exec @ getRemainder ()) ve maçları. endeks 0 ise
@ SetState maçları,
başkanı:. @ kafa + maçlar [0] uzunluk
son: @ kafa
başka
@ SetState []
|
Maçlar regexp geçerli konumda veya sonra. Kadar ve maç ve avanslar tarayıcının konumunu, ya da döner sonu da dahil olmak üzere tarayıcının konumunu sonra kaynak dizenin parçası ile döner null eşleşmesi varsa. |
scanUntil: (regexp) ->
Eğer maçlar = regexp. exec @ getRemainder ()
@ SetState maçları,
başkanı:.. @ kafa + maçlar endeksi + maçlar [0] uzunluk
son: @ kafa
@ Kaynağı. Dilim @ son, @ kafa
başka
@ SetState []
|
#
Tarayıcının konumu, bir karakter tarar döndürür ve gelişmeler. |
scanChar: ->
@ Tarama /. /
|
#
Verilen atlar regexp mevcut konumda. Eşleşen dize ve gelişmeler tarayıcının konumunu, ya da döner uzunluğunu döndürür null eşleşme varsa. |
atlamak: (regexp) ->
@ Maç. Boyu ise @ tarama regexp
|
#
Verilen atlar regexp geçerli konumda veya sonra. Kadar ve maç ve avanslar tarayıcının konumunu, ya da döner sonu da dahil olmak üzere dizenin uzunluğunu döndürür null eşleşme varsa. |
skipUntil: (regexp) ->
@ Baş - @ son ise @ scanUntil regexp
|
#
İleriye baktığımızda
check , checkUntil ve peek yöntemleri tarayıcının konumunu ilerletmeden dizeleri uyan arayın.
|
|
#
Diye bakar görmek için regexp geçerli konumda uyumlu ve tarayıcının konumunu veya döner ilerletmeden eşleşen dize döndürür edilebilir null bir eşleşme olup olmadığını. |
kontrol edin: (regexp) ->
(karşılaşmalar = regexp. exec @ getRemainder ()) ve maçları. endeks 0 ise
@ SetState maçlar
başka
@ SetState []
|
#
Diye bakar görmek için regexp geçerli konumda veya sonra eşleştirilebilir. Kadar ve tarayıcının konumunu veya döner ilerleyen olmadan maç sonunda da dahil olmak üzere mevcut konumu sonra kaynak dizenin parçası ile döner null eşleşme varsa. |
checkUntil: (regexp) ->
Eğer maçlar = regexp. exec @ getRemainder ()
@ SetState maçlar
@ Kaynağı. Dilim @ kafa, @ kafa + maçlar. Endeksi + maçlar [0]. Uzunluk
başka
@ SetState []
|
#
Bir sonraki döner length geçerli konumunu sonra karakter. Bir olmadan çağrılırsa length , bir sonraki karakteri döndürür. Tarayıcının konumu gelişmiş değildir. |
göz: (uzunluk) ->
@ Kaynağı. Substr @ kafa, uzunluk? 1
|
#
Tarayıcı verilerine erişme
getSource , getRemainder , getPosition ve hasTerminated yöntemleri tarayıcının kaynak dize ve pozisyon hakkında bilgi verir.
|
|
#
Tarayıcının kaynak dize döndürür. |
|
#
Tarayıcının konumu itibaren kaynak dizenin kısmını verir. |
getRemainder: ->
@ Kaynağı. Dilim @ kafa
|
#
Tarayıcının konumunu döndürür. Sıfırlama konumunda, bu değer sıfırdır. Sonlandırıldı konumda, bu değer, kaynak dizesi uzunluğudur. |
|
#
Tarayıcı dizenin bitmiş olup olmadığını kontrol eder. |
hasTerminated: ->
@ Kafa @ kaynağıdır. Boyu
|
#
Maç verilerine erişme
getPreMatch , getMatch , getPostMatch ve getCapture yöntemleri En son maç hakkında bilgi vermek.
|
|
#
Giden kaynak dizenin parçası ile döner, ama en son maç dahil. (İade null bir son eşleşme olup olmadığını.) |
getPreMatch: ->
@ Kaynak dilim 0, @ baş -.. @ Maç boyu ise @ maç
|
#
Kaynak dizesi (ya da en son eşleşen kısmını verir null bir son eşleşme olup olmadığını). |
|
#
Hemen en son maç sonrasında kaynak dizenin kısmını verir. (İade null bir son eşleşme olup olmadığını.) |
getPostMatch: ->
@ Kaynağı. Dilim @ baş eğer @ maç
|
#
İade index (veya en son maç inci yakalama null bir son eşleşme olup olmadığını). |
getCapture: (index) ->
@ Yakalar [index]
|
#
Tarayıcının durumunu değiştirme
reset , terminate , concat ve unscan yöntemleri tarayıcının durumunu değiştirmek sağlar.
|
|
#
Sıfırlar tarayıcı geri orijinal konumuna ve maç verilerini temizler. |
reset: ->
@ SetState [], baş: 0, son: 0
|
#
Dizenin sonuna gelişmeler tarayıcı konumu ve maç verilerini temizler. |
sona: ->
@ SetState [], baş:. @ Kaynak boyu, son: @ kafa
|
#
Ekler string tarayıcının kaynak dize. Tarayıcının konumu etkilenmez. |
concat: (string) ->
@ Kaynak + = dize
|
#
Önceki konumuna tarayıcının konumunu belirler ve maç verilerini temizler. Sadece bir önceki konum saklanır. Daha önce hiç pozisyon varsa bir istisna atar. |
unscan: ->
eğer @ maç
@ SetState [], baş: @ son, son: 0
başka
"unscan bir şey" atmak
|
#
|
|
r. |