Regex для замены начальных символов плюс в параметрах запроса (++, + - и +)? - PullRequest
1 голос
/ 06 марта 2020

Я использую Лунр. js.

Этот Javascript код ниже

  • получает параметры запроса из первого поиска
  • заменяет символы привязки + пробелами
  • сохраняет модифицированный запрос в поле поиска для следующего поиска
  • Затем он наконец выполняет поиск с использованием модифицированного запроса
var query = getUrlParameter('q');
var queryWithoutPlus = query.replace(/\+/g, " ");
searchField.value = queryWithoutPlus
index.search(queryWithoutPlus);

Итак, строка параметра запроса может выглядеть как test+ABCD+Test++Test2+-Test+-Test+Test, а Код заменяет символы + в параметре запроса q пробелами, чтобы показать результат пользователю приятным образом, но строку поиска, такую ​​как

"test + test -test"

в настоящее время приводит к

"test test -test"

Я ожидаю

"test + test -test "

Я пытался изменить запрос несколько раз подряд, используя tempQuery, например

var tempQuery = query.replace(/\+\+/g, " -");
var queryWithoutPlus = tempQuery.replace(/\+\-/g, " -");

, но это не сработает с остальными символами + и не чувствую себя хорошо, поэтому мне нужна ваша помощь.

Это просто сводится к использованию правильного регулярного выражения (каким бы оно ни было, приветствуется совет) или есть даже лучший подход для использования параметров запроса с лунром. js?

1 Ответ

2 голосов
/ 07 марта 2020

Вам нужен отрицательный взгляд назад запрос (?<!\+)

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/(?<!\+)\+/g, " ")
>> "test ABCD Test +Test2 -Test -Test Test"

Как уже отмечалось, он недоступен в некоторых браузерах, например в Microsoft. В этом случае вам нужно заменить временное выражение

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/\+\+/g, "#spaceplus#")
  .replace(/\+/g, " ").replace(/#spaceplus#/g, " +")
>> "test ABCD Test +Test2 -Test -Test Test"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...