고급 검색 쿼리 구문을 위한 간단한 파서입니다.
다음과 같이 문자열을 구문 분석합니다.
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
docs
디렉토리에서 이 라이브러리에 대한 Typescript 유형을 사용할 수 있습니다. 여기에서 유형 문서를 찾아보세요.
문서는 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
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이거나 묵시적인 어떠한 종류의 보증도 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.