ตัวแยกวิเคราะห์อย่างง่ายสำหรับไวยากรณ์คำค้นหาขั้นสูง
แยกวิเคราะห์สตริงดังนี้:
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'
คุณสามารถกำหนดค่าคีย์เวิร์ดและช่วงที่ parser ควรยอมรับด้วยอาร์กิวเมนต์ options ยอมรับ 5 ค่า:
keywords
ที่สามารถคั่นด้วยเครื่องหมายจุลภาค (,) ยอมรับอาร์เรย์ของสตริงranges
ที่สามารถคั่นด้วยยัติภังค์ (-) ยอมรับอาร์เรย์ของสตริงtokenize
ซึ่งควบคุมพฤติกรรมของคำค้นหาข้อความ หากตั้งค่าเป็น true
ระบบจะส่งกลับข้อความที่ไม่ใช่คำหลักเป็นอาร์เรย์ของสตริง โดยแต่ละคำในอาร์เรย์เป็นคำที่คั่นด้วยช่องว่าง หรือคำที่มีหลายคำล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่alwaysArray
บูลีนที่ควบคุมลักษณะการทำงานของแบบสอบถามที่ส่งคืน หากตั้งค่าเป็น true
คำหลักที่ตรงกันทั้งหมดจะเป็นอาร์เรย์แทนที่จะเป็นสตริงเสมอ หากตั้งค่าเป็น false
จะเป็นสตริงหากตรงกับค่าเดียว ค่าเริ่มต้นเป็น false
offsets
บูลีนที่ควบคุมพฤติกรรมของแบบสอบถามที่ส่งคืน หากตั้งค่าเป็น true
แบบสอบถามจะมีอ็อบเจ็กต์ออฟเซ็ต หากตั้งค่าเป็น false
แบบสอบถามจะไม่มีอ็อบเจ็กต์ออฟเซ็ต ค่าเริ่มต้นเป็น true
หากไม่มีการระบุคีย์เวิร์ดหรือช่วง หรือหากไม่มีอยู่ในคำค้นหาที่กำหนด searchQuery.parse
จะส่งกลับสตริงหาก tokenize
เป็นเท็จ หรืออาร์เรย์ของสตริงใต้ text
คีย์หาก tokenize
เป็นจริง
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 และรันด้วยมอคค่า
เรียกใช้ npm install should
และ npm install -g mocha
เพื่อติดตั้งทั้งสองอย่าง
รันการทดสอบด้วย make test
ใบอนุญาต MIT (MIT)
ลิขสิทธิ์ (ค) 2014
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.