Вы уверены? Меня это немного удивляет. Я бы подумал, что если ваше регулярное выражение достаточно жадное, то вы сможете сопоставить это. Обратите внимание: удаление точки из граничных символов ломает создание ссылок для слов в конце предложения.
Я провёл небольшой тест с вашим регулярным выражением ниже на regex101.com, и оно, кажется, работает с текущими граничными символами, см. regex101: build, test, and debug regex
Обратите внимание, что если я правильно понял вашу цель, вам, возможно, потребуется преобразовать некоторые ваши захватывающие группы в незахватывающие с помощью (?:).
Невозможность использования | очень раздражает, согласен. Обратите внимание, что для части ID|id вы можете просто использовать модификатор i, чтобы сделать регулярное выражение регистронезависимым. Что касается чисел, если вам действительно нужен точный диапазон от 1 до 10 и от 1 до 100, это сложно; если ослабить требование до диапазонов 1–19 и 1–199, это упростит задачу.
Вот ваше регулярное выражение с незахватывающими группами, которое, как я думаю, должно работать:
Я обнаружил две основные проблемы со встроенными отслеживаемыми словами:
нельзя добавлять сложные регулярные выражения: возникает ошибка «Слово слишком длинное (максимум 100 символов)»;
нельзя использовать произвольные символы в качестве границ слов, в частности знак подчеркивания;
также невозможность редактировать правила или менять порядок их выполнения не совсем идеальна.
В PR для компонента границы слов вынесены на уровень пользователя, и проблем с длинными регулярными выражениями нет (за исключением невозможности использовать символ |, что также решено в этом PR).
В остальном отслеживаемые слова работают отлично, и если эти проблемы будут устранены в ядре, я только за.
Нашёл ли кто-нибудь обходной путь для использования вертикальных черт | на данный момент? У меня есть некоторые регулярные выражения, где они критически важны.
Привет, спасибо за разработку этой замечательной темы, мне она очень понравилась! Не могли бы вы выпустить её для всех пользователей, а не только для администраторов?
Этот компонент темы, на который вы ссылаетесь, является моей адаптацией решения Сэма, которое я создал как обходной путь для задачи, описанной вами в другой теме.
Это простые компоненты темы, которые лишь меняют способ отображения определённых слов в посте (у Сэма конкретные слова преобразуются в ссылки, у меня — в изображения) на основе настроек компонента темы, которыми управляют только администраторы.
Описанную вами функцию невозможно реализовать в рамках компонента темы. Для этого потребуется плагин, который будет хранить в базе данных набор пар (слово, URL изображения) для каждого пользователя, а преобразование слова в изображение должно выполняться на стороне сервера при формировании отформатированного содержимого поста (в виде HTML). Компонент темы не может этого сделать, так как это только фронтенд-код (код, выполняемый на стороне клиента). Если вы решите нанять кого-то для выполнения этой работы, критически важно, чтобы исполнитель понимал эти детали.
Это выходит за рамки данного компонента темы и потребует гораздо более сложной работы. Рекомендую опубликовать подробное описание того, как вы хотите, чтобы эта функция работала, в канале Marketplace. Там вы сможете найти специалиста с опытом работы с внутренним устройством Discourse, который сможет вам помочь.
Это уже не раз поднималось в этой теме, но я хочу уточнить ещё раз: есть ли способ ограничить это определённой категорией или исключить некоторые категории? Я хотел бы использовать это в нашей категории для новичков, чтобы разместить ссылки на все основные термины, которые нужно знать новым участникам, но в других разделах они будут просто раздражать опытных пользователей. Спасибо!
@Canapin вы упустили мою проблему: дело не в повторяющихся словах, а в многократной замене шаблона для одного слова: в URL шаблон, подлежащий замене, встречается дважды.
Поскольку опция замены шаблона /g по умолчанию включена в плагине, она должна применяться ко всем вхождениям $1 в замене, а не только к первому.
Это отличается от случая, когда ключевое слово встречается несколько раз в предложении, строке или абзаце. Замена должна учитывать несколько вхождений выделенного фрагмента.
Хорошо знать, что linkify обрабатывает только одно, но хотелось бы по одному на пост. Возможно, сегодня попробую это применить: когда отслеживаемые слова находят совпадение, это иногда становится невыносимым.