Parser sederhana untuk sintaksis kueri penelusuran lanjutan.
Itu mem-parsing string seperti ini:
from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos
Dan mengubahnya menjadi objek seperti ini:
{
from : [ '[email protected]' , '[email protected]' ] ,
to : 'me' ,
subject : 'vacations' ,
date : {
from : '1/10/2013' ,
to : '15/04/2014'
} ,
text : 'photos' ,
offsets :
[ { keyword : 'from' , value : '[email protected],[email protected]' , offsetStart : 0 , offsetEnd : 32 } ,
{ keyword : 'to' , value : 'me' , offsetStart : 33 , offsetEnd : 38 } ,
{ keyword : 'subject' , value : 'vacations' , offsetStart : 39 , offsetEnd : 56 } ,
{ keyword : 'date' , value : '1/10/2013-15/04/2014' , offsetStart : 57 , offsetEnd : 82 } ,
{ text : 'photos' , offsetStart : 83 , offsetEnd : 89 } ]
}
$ npm install search-query-parser
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos' ;
var options = { keywords : [ 'from' , 'to' , 'subject' ] , ranges : [ 'date' ] }
var searchQueryObj = searchQuery . parse ( query , options ) ;
// searchQueryObj.from is now ['[email protected]', '[email protected]']
// searchQueryObj.to is now 'me'
// searchQueryObj.date is now {from: '1/10/2013', to: '15/04/2014'}
// searchQueryObj.text is now 'photos'
Anda dapat mengonfigurasi kata kunci dan rentang apa yang harus diterima parser dengan argumen opsi. Ia menerima 5 nilai:
keywords
yang dapat dipisahkan dengan koma (,). Menerima array string.ranges
, yang dapat dipisahkan dengan tanda hubung (-). Menerima array string.tokenize
, yang mengontrol perilaku istilah pencarian teks. Jika disetel ke true
, istilah teks non-kata kunci dikembalikan sebagai larik string dengan setiap istilah dalam larik berupa kata yang dipisahkan spasi, atau istilah multi-kata yang diapit tanda kutip tunggal atau ganda.alwaysArray
, boolean yang mengontrol perilaku kueri yang dikembalikan. Jika disetel ke true
, semua kata kunci yang cocok akan selalu berupa array, bukan string. Jika disetel ke false
maka akan menjadi string jika cocok dengan satu nilai. Defaultnya adalah false
.offsets
, boolean yang mengontrol perilaku kueri yang dikembalikan. Jika disetel ke true
, kueri akan berisi objek offset. Jika disetel ke false
, kueri tidak akan berisi objek offset. Defaultnya adalah true
. Jika tidak ada kata kunci atau rentang yang ditentukan, atau jika tidak ada kata kunci atau rentang yang ditentukan dalam kueri penelusuran tertentu, maka searchQuery.parse
akan mengembalikan string jika tokenize
salah, atau array string di bawah text
kunci jika tokenize
benar.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'a query with "just text"' ;
var parsedQuery = searchQuery . parse ( query ) ;
// parsedQuery is now 'a query with "just text"'
var options = { keywords : [ 'unused' ] } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now 'a query with "just text"'
var options2 = { tokenize : true } ;
var parsedQueryWithTokens = searchQuery . parse ( query , options2 ) ;
// parsedQueryWithTokens is now: ['a', 'query', 'with', 'just text']
Anda juga dapat menggunakan sintaks pengecualian, seperti -from:[email protected] name:hello,world
. Ini juga berfungsi dengan istilah teks non-kata kunci ketika tokenize
disetel ke true
.
{
name : [ 'hello' , 'world' ] ,
exclude : {
from : [ '[email protected]' ]
}
}
Terkadang memeriksa apakah suatu kata kunci mengandung string atau tidak bisa menjadi berlebihan dan rentan terhadap kesalahan; seringkali lebih mudah untuk mengharapkan segala sesuatunya berupa array meskipun itu berarti sering melakukan loop 1 iterasi.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'test:helloworld fun:yay,happy' ;
var options = { keywords : [ 'test' , 'fun' ] } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now:
// {
// test: 'helloworld',
// fun: ['yay', 'happy']
// }
var optionsAlwaysArray = { keywords : [ 'test' , 'fun' ] , alwaysArray : true } ;
var parsedQueryWithOptions = searchQuery . parse ( query , options ) ;
// parsedQueryWithOptions is now:
// {
// test: ['helloworld'], //No need to check whether test is a string or not!
// fun: ['yay', 'happy']
// }
Objek offsets bisa menjadi sangat besar dengan permintaan pencarian yang panjang yang bisa menjadi penggunaan ruang yang tidak perlu jika tidak ada fungsi yang bergantung padanya. Itu cukup dimatikan menggunakan opsi offsets: false
.
Kapan saja, Anda dapat kembali dan merangkai kueri penelusuran yang telah diurai. Ini bisa berguna jika Anda ingin memanipulasi objek permintaan pencarian yang diurai.
var searchQuery = require ( 'search-query-parser' ) ;
var query = 'from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos' ;
var options = { keywords : [ 'from' , 'to' , 'subject' ] , ranges : [ 'date' ] }
var searchQueryObj = searchQuery . parse ( query , options ) ;
searchQueryObj . to = 'you' ;
var newQuery = searchQuery . stringify ( query , options ) ;
// newQuery is now: photos from:[email protected],[email protected] to:you subject:vacations date:1/10/2013-15/04/2014
Jenis skrip tersedia untuk perpustakaan ini di direktori docs
. Telusuri dokumentasi jenis di sini.
Dokumentasi dihasilkan menggunakan node_modules/.bin/typedoc index.d.ts
29 tes ditulis menggunakan kerangka pengujian BDD must.js, dan dijalankan dengan mocha.
Jalankan npm install should
dan npm install -g mocha
untuk menginstal keduanya.
Jalankan tes dengan make test
.
Lisensi MIT (MIT)
Hak Cipta (c) 2014
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.