Я пытаюсь сопоставить строку по префиксу, который заканчивается определенным символом. Например, если моя строка равна "abcd"
и оканчивается на #
, то любое слово, являющееся префиксом "abcd"
, должно совпадать, если оно оканчивается на #
. Вот несколько примеров, которые помогут проиллюстрировать шаблон:
Ввод : "ab#"
дает true
(поскольку "ab"
является префиксом "abcd"
и заканчивается #
).
Ввод : "abcd#"
дает true
(поскольку "abcd"
является префиксом "abcd"
и заканчивается #
).
Ввод : "bc#"
дает false
(поскольку "bc"
не является префиксом из "abcd"
).
Ввод : "ab@"
дает false
(в то время как "ab"
является префиксом из "abcd"
, оно не заканчивается #
).
Ввод : "ac#"
дает false
(хотя "ac"
содержится в "abcd"
, оно не начинается с префикса от "abcd"
).
Пока мне удалось прийтисо следующим выражением, которое, кажется, работает нормально:
/(abcd|abc|ab|a)#/
Хотя это работает, это не очень практично, так как более длинные слова длиной n
сделают выражение довольно большим:
/(n|n-1|n-2| ... |1)#/
Есть ли способ переписать это выражение, чтобы оно было более масштабируемым и лаконичным?
ExДостаточно моей попытки (в JS):
const regex = /(abcd|abc|ab|a)#/;
console.log(regex.test("abcd#")); // true
console.log(regex.test("ab#")); // true
console.log(regex.test("abc#")); // true
console.log(regex.test("abz#")); // false
console.log(regex.test("abc@")); // false
Редактировать: Некоторые из представленных решений хороши и делают то, что мне нужно, однако, для этого конкретного вопроса, я послерешение, которое использует чистые регулярные выражения для соответствия префиксу.