Функция отслеживания просмотренных слов Test сломана

При использовании функции «тест» на экране настройки отслеживаемых слов в консоль многократно выводится ошибка: «raw bracket is not allowed in regular expression with unicode flag».

  1. Перейдите по адресу https://meta.discourse.org/admin/customize/watched_words/action/require_approval
  2. Откройте консоль браузера
  3. Нажмите кнопку «Тест»
  4. Введите любой текст
  5. Наблюдайте за ошибками

Ошибка возникает в файле watched-words.js. Проблема в том, что передаваемое регулярное выражение (?:[^[:word:]]|^)(word1|word2)(?=[^[:word:]]|$) корректно для Ruby, но не для JavaScript. Это регулярное выражение возвращается через API по адресу https://meta.discourse.org/admin/customize/watched_words.json. Данные JSON формируются сериализатором watched words, который вызывает word watcher, передавая только параметр action.

Несколько недель назад это работало корректно, но один из PR внес изменения, добавив два дополнительных параметра. Одним из них является параметр engine, который по умолчанию установлен в значение Ruby. В вышеупомянутом вызове этот параметр не указывается. В результате возвращается регулярное выражение, специфичное для Ruby, но оно обрабатывается движком регулярных выражений JavaScript.

5 лайков

Я могу воспроизвести это на своём тестовом сайте.

  • Настройте заблокированное отслеживаемое слово
  • Используйте тестовую функцию, чтобы проверить его
  • В консоли появляется эта ошибка:
Uncaught SyntaxError: raw bracket is not allowed in regular expression with unicode flag
    createWatchedWordRegExp watched-words.js:12
    matches admin-watched-word-test.js:62
    matches admin-watched-word-test.js:61
    o handle-descriptor.js:61
    get Ember
    untrack validator.js:681
    Ember 3
    o reference.js:175
    tag reference.js:136
    track validator.js:668
    f reference.js:135
    <anonymous> runtime.js:2077
    tag reference.js:136
    track validator.js:668
    f reference.js:135
    evaluate runtime.js:2089
    _execute runtime.js:4306
    execute runtime.js:4291
    rerender runtime.js:4606
    Ember 2
    It runtime.js:4139
    Ember 3
    invoke queue.ts:201
    flush queue.ts:98
    flush deferred-action-queues.ts:75
    _end index.ts:616
    end index.ts:298
    _runExpiredTimers index.ts:739
    setTimeout handler*setTimeout platform.ts:50
    _installTimerTimeout index.ts:783
    _scheduleExpiredTimers index.ts:764
    _runExpiredTimers index.ts:738
watched-words.js:12

Спасибо за подробный отчёт. Я проверю, сможем ли мы привлечь кого-то для изучения проблемы. :slight_smile: :+1:

5 лайков

Спасибо за подробный отчет, @Arthri.

Это исправлено.

3 лайка