Я использую выбранный (chosen website), чтобы сделать selectlist более удобным и функция поиска ищет только одно точное слово.regex для редактирования, чтобы найти несколько слов с выбранными
Я имею в виду, что если список содержит
- TEST - > Установки Коммуны
- TEST - > Установки коммун - > Администратор Строительные
- ИСПЫТАНИЙ - > Установки коммун - > Парковочные
- TEST - > Установки Коммуны - > Малые здания
и тип пользователя
- «Установка», все в порядке (Пользователь см 4 записи)
- «Установка Коммуны», пользователь см 0 результата (потому что, когда есть более чем 1 слово, поиск не работает)
функция поиска
escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
Как я могу изменить это чтобы пользователь мог искать более одного слова?
Вот полная функция JS:
AbstractChosen.prototype.winnow_results = function() {
var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
this.no_results_clear();
results = 0;
searchText = this.get_search_text();
escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
zregex = new RegExp(escapedSearchText, 'i');
regex = this.get_search_regex(escapedSearchText);
_ref = this.results_data;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
option.search_match = false;
results_group = null;
if (this.include_option_in_results(option)) {
if (option.group) {
option.group_match = false;
option.active_options = 0;
}
if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
results_group = this.results_data[option.group_array_index];
if (results_group.active_options === 0 && results_group.search_match) {
results += 1;
}
results_group.active_options += 1;
}
if (!(option.group && !this.group_search)) {
option.search_text = option.group ? option.label : option.text;
option.search_match = this.search_string_match(option.search_text, regex);
if (option.search_match && !option.group) {
results += 1;
}
if (option.search_match) {
if (searchText.length) {
startpos = option.search_text.search(zregex);
text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
}
if (results_group != null) {
results_group.group_match = true;
}
} else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
option.search_match = true;
}
}
}
}
this.result_clear_highlight();
if (results < 1 && searchText.length) {
this.update_results_content("");
return this.no_results(searchText);
} else {
this.update_results_content(this.results_option_build());
return this.winnow_results_set_highlight();
}
};
Это не было моим опытом. Пока слова непрерывны, они должны соответствовать более чем одному слову (т. Е. «Hello dude» будет соответствовать «Hello dude» и «Hello dudes». Можете ли вы опубликовать jsfiddle с помощью только того окна выбора, который вы используете? – tobylaroni
Вот мой jsfiddle. Вы можете видеть, что он соответствует точно так, как вы ожидали. Не должно быть никаких оснований делать что-то необычное с регулярным выражением. Https://jsfiddle.net/Lf8uw80g/ – tobylaroni
@tobylaroni: да это странно .. Вот мой jsfiddle: http: // jsfiddle.net/RA8ej/168/ – clement