diff --git a/src/SmartRegexpFactory.py b/src/SmartRegexpFactory.py new file mode 100644 index 00000000000..48d5d3d08c8 --- /dev/null +++ b/src/SmartRegexpFactory.py @@ -0,0 +1,19 @@ +import re + + +# adapted from function _fnFilterCreateSearch() defined in https://github.com/DataTables/DataTablesSrc/blob/master/js/core/core.filter.js +class SmartRegexpFactory: + + def createSmartRegexp(self, searchTerm): + return re.compile( + rf'^{self.assertContainsWords(self.getWords(searchTerm))}.*$', + flags=re.IGNORECASE) + + def getWords(self, searchTerm): + return re.split(r'\s+', searchTerm) + + def assertContainsWords(self, words): + return ''.join([self.assertContainsWord(word) for word in words]) + + def assertContainsWord(self, word): + return f'(?=.*?{word})' diff --git a/src/SmartSearch.py b/src/SmartSearch.py index d4a8d6ec1ca..c4b9e76772f 100644 --- a/src/SmartSearch.py +++ b/src/SmartSearch.py @@ -1,25 +1,11 @@ import re +from SmartRegexpFactory import SmartRegexpFactory class SmartSearch: def __init__(self, searchTerm): - self.regexp = _SmartRegexpFactory().createSmartRegexp(searchTerm) + self.smartRegexp = SmartRegexpFactory().createSmartRegexp(searchTerm) def matches(self, str): - return True if re.match(self.regexp, str, flags=re.IGNORECASE) else False - - -class _SmartRegexpFactory: - - def createSmartRegexp(self, searchTerm): - return rf'^{self.assertContainsWords(self.getWords(searchTerm))}.*$' - - def getWords(self, searchTerm): - return re.split(r'\s+', searchTerm) - - def assertContainsWords(self, words): - return ''.join([self.assertContainsWord(word) for word in words]) - - def assertContainsWord(self, word): - return f'(?=.*?{word})' + return True if self.smartRegexp.match(str) else False