Ein einfacher Parser für die erweiterte Suchabfragesyntax.
Es analysiert eine Zeichenfolge wie folgt:
from:[email protected],[email protected] to:me subject:vacations date:1/10/2013-15/04/2014 photos
Und verwandelt es in ein Objekt wie dieses:
{
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'
Mit dem Optionsargument können Sie konfigurieren, welche Schlüsselwörter und Bereiche der Parser akzeptieren soll. Es akzeptiert 5 Werte:
keywords
, die durch Kommas (,) getrennt werden können. Akzeptiert ein Array von Zeichenfolgen.ranges
, die durch einen Bindestrich (-) getrennt werden können. Akzeptiert ein Array von Zeichenfolgen.tokenize
, das das Verhalten von Textsuchbegriffen steuert. Wenn auf true
gesetzt, werden Textbegriffe, die keine Schlüsselwörter sind, als Array von Zeichenfolgen zurückgegeben, wobei jeder Begriff im Array ein durch Leerzeichen getrenntes Wort oder ein aus mehreren Wörtern bestehender Begriff ist, der von einfachen oder doppelten Anführungszeichen umgeben ist.alwaysArray
, ein boolescher Wert, der das Verhalten der zurückgegebenen Abfrage steuert. Wenn auf true
gesetzt, wären alle übereinstimmenden Schlüsselwörter immer Arrays statt Strings. Wenn der Wert auf false
gesetzt ist, handelt es sich um Zeichenfolgen, wenn ein einzelner Wert übereinstimmt. Der Standardwert ist false
.offsets
, ein boolescher Wert, der das Verhalten der zurückgegebenen Abfrage steuert. Wenn auf true
gesetzt, enthält die Abfrage das Offsets-Objekt. Wenn der Wert auf false
gesetzt ist, enthält die Abfrage das Offsets-Objekt nicht. Der Standardwert ist true
. Wenn keine Schlüsselwörter oder Bereiche angegeben sind oder in der angegebenen Suchabfrage keine vorhanden sind, gibt searchQuery.parse
eine Zeichenfolge zurück, wenn tokenize
„false“ ist, oder ein Array von Zeichenfolgen unter dem text
wenn tokenize
true“ ist.
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']
Sie können auch eine Ausschlusssyntax verwenden, etwa -from:[email protected] name:hello,world
. Dies funktioniert auch mit Textbegriffen, die keine Schlüsselwörter sind, wenn tokenize
auf true
gesetzt ist.
{
name : [ 'hello' , 'world' ] ,
exclude : {
from : [ '[email protected]' ]
}
}
Manchmal kann die Prüfung, ob ein Schlüsselwort eine Zeichenfolge enthält oder nicht, übertrieben und fehleranfällig sein. Es ist oft einfacher, einfach davon auszugehen, dass alles ein Array ist, auch wenn das bedeutet, dass häufig Schleifen mit einer Iteration ausgeführt werden müssen.
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']
// }
Das Offsets-Objekt könnte bei langen Suchabfragen ziemlich groß werden, was eine unnötige Platzbeanspruchung bedeuten könnte, wenn keine Funktionalität davon abhängt. Es kann einfach mit der Option offsets: false
ausgeschaltet werden.
Sie können jederzeit zurückgehen und die analysierte Suchabfrage mit Strings versehen. Dies kann nützlich sein, wenn Sie das analysierte Suchabfrageobjekt bearbeiten möchten.
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-Typen sind für diese Bibliothek im Verzeichnis docs
verfügbar. Durchsuchen Sie hier die Typdokumentation.
Die Dokumentation wird mit node_modules/.bin/typedoc index.d.ts
generiert
Die 29 Tests werden mit dem BDD-Testframework Should.js geschrieben und mit Mocha ausgeführt.
Führen Sie npm install should
und npm install -g mocha
um beide zu installieren.
Führen Sie Tests mit make test
aus.
Die MIT-Lizenz (MIT)
Urheberrecht (c) 2014
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS unerlaubter Handlung ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.