Last active
August 3, 2018 16:18
-
-
Save UziTech/8877a79ebffe8b3de9a2 to your computer and use it in GitHub Desktop.
Get search terms
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* DWTFYW License | |
* | |
* Author: Tony Brix, http://tonybrix.info | |
* | |
* Example: | |
* positive terms -----------V-----------V---------V-------V-----------------------V | |
* console.log(getSearchTerms("this -is 'a string' '-with' positive -'and negative' terms")); | |
* negative terms ----------------^-------------------------------------^ | |
* Result: | |
* { | |
* "positive": [ | |
* "this", | |
* "a string", | |
* "-with", | |
* "positive" | |
* "terms" | |
* ], | |
* "negative": [ | |
* "is", | |
* "and negative" | |
* ] | |
* } | |
* | |
* Get search terms separated by spaces from a search query. Negative terms have a dash(-) in front. Terms can have space or dash if quoted. | |
* @param {string} search Terms | |
* @return {object} An array of the terms seperated by positive and negative | |
*/ | |
function getSearchTerms(search) { | |
const matches = search.match(/-?"[^"]+"|-?'[^']+'|\S+/g); | |
// sort the terms | |
const terms = { | |
positive: [], | |
negative: [] | |
}; | |
if (matches !== null) { | |
for (let i = 0; i < matches.length; i++) { | |
let match = matches[i]; | |
const negative = ("-" === match.substr(0, 1)); | |
if (negative) { | |
match = match.substr(1); | |
} | |
if ((match.substr(0, 1) === "\"" && match.substr(-1) === "\"") || (match.substr(0, 1) === "'" && match.substr(-1) === "'")) { | |
match = match.substr(1, match.length - 2); | |
} | |
if (negative) { | |
terms.negative.push(match); | |
} else { | |
terms.positive.push(match); | |
} | |
} | |
} | |
return terms; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* DWTFYW License | |
* | |
* Author: Tony Brix, http://tonybrix.info | |
* | |
* Example: | |
* positive terms --------V-----------V---------V-------------------------------V | |
* var_dump(getSearchTerms("this -is 'a string' '-with' -'positive and negative' terms")); | |
* negative terms -------------^--------------------------------^ | |
* Result: | |
* array(2) { | |
* ["positive"]=> | |
* array(4) { | |
* [0]=> | |
* string(4) "this" | |
* [1]=> | |
* string(8) "a string" | |
* [2]=> | |
* string(5) "-with" | |
* [3]=> | |
* string(5) "terms" | |
* } | |
* ["negative"]=> | |
* array(2) { | |
* [0]=> | |
* string(2) "is" | |
* [1]=> | |
* string(21) "positive and negative" | |
* } | |
* } | |
* | |
* Get search terms separated by spaces from a search query. Negative terms have a dash(-) in front. Terms can have space or dash if quoted. | |
* @param string $search | |
* @return array An array of the terms seperated by positive and negative | |
*/ | |
function getSearchTerms($search) { | |
$matches = null; | |
preg_match_all("/-?\"[^\"]+\"|-?'[^']+'|\S+/", $search, $matches); | |
// sort the terms | |
$terms = [ | |
"positive" => [], | |
"negative" => [] | |
]; | |
foreach ($matches[0] as $match) { | |
$negative = ("-" === $match[0]); | |
if ($negative) { | |
$match = substr($match, 1); | |
} | |
if (($match[0] === '"' && substr($match, -1) === '"') || ($match[0] === "'" && substr($match, -1) === "'")) { | |
$match = substr($match, 1, strlen($match) - 2); | |
} | |
if ($negative) { | |
$terms["negative"][] = $match; | |
} else { | |
$terms["positive"][] = $match; | |
} | |
} | |
return $terms; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment