高度な検索クエリ構文のためのシンプルなパーサー。
次のように文字列を解析します。
from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos
そしてそれを次のようなオブジェクトに変換します。
{
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'
options 引数を使用して、パーサーが受け入れる必要があるキーワードと範囲を構成できます。 5 つの値を受け入れます。
keywords
カンマ (,) で区切ることができます。文字列の配列を受け入れます。ranges
ハイフン (-) で区切ることができます。文字列の配列を受け入れます。tokenize
、テキスト検索用語の動作を制御します。 true
に設定すると、キーワード以外のテキスト用語が文字列の配列として返されます。配列内の各用語は、空白で区切られた単語、または一重引用符または二重引用符で囲まれた複数の単語からなる用語です。alwaysArray
、返されたクエリの動作を制御するブール値。 true
に設定すると、一致したすべてのキーワードは常に文字列ではなく配列になります。 false
に設定すると、単一の値と一致した場合に文字列になります。デフォルトはfalse
です。offsets
、返されるクエリの動作を制御するブール値。 true
に設定すると、クエリにはオフセット オブジェクトが含まれます。 false
に設定すると、クエリにはオフセット オブジェクトが含まれません。デフォルトはtrue
です。キーワードまたは範囲が指定されていない場合、または指定された検索クエリに何も存在しない場合、 searchQuery.parse
、 tokenize
が false の場合は文字列を返し、 tokenize
が true の場合はキーtext
の下の文字列の配列を返します。
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']
-from:[email protected] name:hello,world
のような除外構文を使用することもできます。これは、 tokenize
がtrue
に設定されている場合、キーワード以外のテキスト用語でも機能します。
{
name : [ 'hello' , 'world' ] ,
exclude : {
from : [ '[email protected]' ]
}
}
キーワードに文字列が含まれているかどうかをチェックすると過剰になり、エラーが発生しやすくなる場合があります。多くの場合、1 回の反復ループを頻繁に実行することになる場合でも、すべてが配列であると単純に期待する方が簡単です。
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']
// }
オフセット オブジェクトは、検索クエリが長くなると非常に巨大になる可能性があり、それに依存する機能がない場合、スペースを不必要に使用する可能性があります。これは、オプションoffsets: false
使用して簡単にオフにすることができます。
いつでも、解析された検索クエリに戻って文字列化することができます。これは、解析された検索クエリ オブジェクトを操作したい場合に便利です。
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
Typescript タイプは、 docs
ディレクトリにあるこのライブラリで利用できます。ここでタイプのドキュメントを参照してください。
ドキュメントはnode_modules/.bin/typedoc index.d.ts
を使用して生成されます。
29 のテストは BDD テスト フレームワーク should.js を使用して記述され、mocha で実行されます。
npm install should
とnpm install -g mocha
実行して両方をインストールします。
make test
でテストを実行します。
MIT ライセンス (MIT)
著作権 (c) 2014
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそれを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。