Эта ошибка была обнаружена, когда я использовал спецификацию автоматической тегировки для короткой строки, например, «art». В результате автоматически тегировались темы со словом «artificial» и т. д.
К сведению: функция «тест» на странице спецификации автоматической тегировки работает корректно (для автоматической тегировки по слову «art» слово «artificial» не генерирует тег в тесте).
Ошибка, вероятно, осталась незамеченной, поскольку автоматическая тегировка по коротким отслеживаемым словам, возможно, встречается редко.
Похоже, что у меня по умолчанию был включён watched_word_regular_expression, и я не осознавал, что это нарушает работу «действия по целым словам». Обязательно ли, чтобы действие по целым словам было несовместимо с регулярными выражениями?
То есть, следует ли мне всё ещё считать это ошибкой или же это необходимое ограничение, вызванное другой функцией?
На данный момент я всё ещё считаю это ошибкой. Я не вижу никаких причин, по которым парсинг целых слов без использования регулярных выражений должен быть несовместим с парсингом на основе регулярных выражений, когда указано регулярное выражение.
Если вы используете регулярные выражения для некоторых из отслеживаемых слов, то это применяется ко всем. Следовательно, если регулярные выражения включены и у вас настроена автоматическая разметка для art, то ожидается, что artificial также будет размечен. Чтобы искать только слово art, используйте метасимвол границы слова \b. В случае с art это будет выглядеть как \bart\b.
Большое спасибо всем. Приношу извинения, если моё довольно поверхностное понимание регулярных выражений оказалось недостаточным и привело к неверному пониманию того, как они работают для отслеживаемых слов. Однако есть несколько моментов:
Я полагал, что контекст регулярного выражения интерпретируется как «строка в пределах границ слова». Что ещё может иметь смысл? Конечно, не весь документ темы? В данном случае, чтобы слово «artificial» было отмечено, мне пришлось бы указать art* (или art.* или что-то подобное, как упоминается в заголовке этой темы).
Джошуа: спасибо за предложение использовать мета-символ границы слова. Только что попробовал, но это не сработало. Ни в функции тестирования, ни в реальной работе. Так что… на данный момент, похоже, нет обходного пути (или «правильного способа» добиться желаемого поведения).
Функция тестирования очень удобна. Она ведёт себя именно так, как я интуитивно предполагал. art срабатывает только тогда, когда слово «art» появляется как отдельное слово (и не срабатывает для «artificial»), art* срабатывает на «artificial», как и ожидалось. Кроме того, art* life срабатывает как на «art life», так и на «artificial life». Я также думал, что функция тестирования может не использовать парсинг регулярных выражений, если вводится только одно слово, но нет… foo* art срабатывает на «foobar art», но не срабатывает на «foobar artificial». Так что… тот, кто писал функцию тестирования, думал так же, как и я (кажется).
Итак, в итоге:
Предложение Джефа добавить напоминание о том, что watched_words_regular_expressions включено, хорошее.
Поведение функции тестирования должно совпадать с реальным поведением.
И к слову, я предпочитаю, чтобы реальное поведение соответствовало текущему поведению функции тестирования.
Если кому-то нужны более глубокие знания регулярных выражений, чем те, что подразумеваются текущей функцией тестирования, было бы полезно иметь где-то примеры.
Если существует обходной путь или «правильный способ» (например, «используйте \bart\b для достижения желаемого поведения»), я с радостью воспользуюсь им.
Ещё раз спасибо всем за внимание к этой довольно незначительной проблеме для замечательной платформы!
В этом PR я добавил уведомление, когда в настройках сайта включено использование регулярных выражений для отслеживаемых слов:
Вот как это выглядит: сначала с отключёнными регулярными выражениями, а затем с включёнными (обратите внимание на уведомление и изменённый плейсхолдер поля ввода):
Если у вас включена настройка сайта watched words regular expressions, то необходимо использовать \bart\b, где \b обозначает границу слова. Если эта настройка отключена, использовать её не нужно, так как границы слова добавляются автоматически.
Я только что проверил это, и у меня всё работает отлично, включая модальное окно тестирования:
Привет, Бьянка,
Большое спасибо за то, что занялись этим вопросом.
Я был сбит с толку относительно включения watched words regular expressions. Я думал, что это устанавливается автоматически, если я использую * в моём спецификаторе автотриггера. Я вижу, что это не так, поэтому неудивительно, что моя попытка с \bart\b не удалась.
Я проверю «последнюю версию», чтобы получить вашу реализацию функции тестирования. Для меня Test всегда работал, как и для вас.