Автозаполнение последней неполной фразы с использованием регулярного выражения в JavaScript - PullRequest
1 голос
/ 18 июня 2020

У меня есть предложение, которое выглядит следующим образом:

term = "How much new sales in new"

Скажем, я получил несколько предложений, например New York, New Delhi, Papua New Guinea, и я выбираю New York.

choice = "New York"

Теперь мне нужно убедитесь, что любая последняя подстрока, соответствующая выделению, заменяется выбранным. 1016 * Но это не кажется надежным решением, и я бы предпочел использовать regex. Пользователь также может ввести вот так:

term = "How much new sales in new     yo"

Здесь я гарантированно получу предложение New York против yo, которое следует заменить на New York

Есть ли regex решение для обеспечения полной замены последнего совпадения подстроки выбранным?

Примечание: Я использую jquery ui autocomplete

1 Ответ

1 голос
/ 18 июня 2020

Вы можете создать шаблон, который будет соответствовать всем возможным префиксам choice, со всеми пробелами, замененными шаблоном \s+, чтобы соответствовать 1 или более пробелам, и добавив $ в конце шаблона, чтобы соответствовать только в конец строки:

/N(?:e(?:w(?:\s+(?:Y(?:o(?:r(?:k)?)?)?)?)?)?)?$/i

Будет соответствовать N, Ne, New, et c. с любым количеством пробелов между New и York, и только в конце строки из-за $.

См. демонстрацию регулярного выражения

См. Демонстрацию JavaScript:

const make_prefix = (string) => {
    let s = string.charAt(0);
    for (let i=1; i<string.length; i++) {
        s += "(?:" + string.charAt(i);
    }
    for (let i=1; i<string.length; i++) {
        s += ")?";
    }
    return s;
}

const term = "How much new sales in new      yo";
const choice = "New York";
const regex = new RegExp(make_prefix(choice).replace(/\s+/g, '\\s+') + '$', 'i');
console.log(term.replace(regex, choice))
// => How much new sales in New York
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...