вот мой вариант использования.У меня есть список слов или фраз, и мне нужно, чтобы они были в массиве строк, но строка может содержать что-либо в строке.Поэтому я просто придумал очень маловероятный разделитель.Таким образом, пользователь может искать фразы несколькими способами, одна из которых - поиск по шаблону.
, скажем, пользователь ищет "* * word * word"
, эти случаи работают нормально, так как я обрабатываю строку для типа регулярного выражения js до чего-то вроде следующего ".*? .*? word .*? word"
.
// separator = |;|
finalized regex above: /(.*? .*? word .*? word)\|;\|/gm
Thisхорошо работает для меняВ большинстве проверенных вариантов использования на данный момент.
Проблема в том, что в одном тестовом случае пользователь вводит следующее:
I * going * on *day
, что переводится в:
(I .*? going .*? on .*?day)\|;\|/gm
проблема в том, что в строковом массиве есть запись в позиции 1, например, так:
I love going swimming on tuesday|;|phrase2|;|phrase3|;|phrase4|;|I love friday|;|last phrase
, поэтому с учетом вышесказанного я получаю совпадение:
I love going swimming on tuesday|;|phrase2|;|phrase3|;|phrase4|;|I love friday|;|
как я могу настроить свое регулярное выражение, чтобы разрешить все, кроме значения моего разделителя?
update -
Ваше право здесь - лучший пример моей проблемы
GOTHIC PEOPLE WAS HERE LAST NIGHT|;|SAD + WIFE = HAPPY|;|GOLDEN 12|;|
regex:
(GOTHIC .*? WAS HE.*?2)\|;\|
Технически, я не ожидал, что это совпадет, но с трейлингом 2 это совпадет прямо в конце строки.Поэтому мне нужно знать, как получить совпадения только до |; |
ссылки на регулярное выражение: https://regex101.com/r/yOuNYt/1
// лучший пример --- RE EXPLAINED
regex: GOTHIC .*? WAS HE.*?2(\|;\|)
Вышеуказанное соответствует всему.Вот результат:
GOTHIC PEOPLE WAS HERE LAST NIGHT|;|SAD + WIFE = HAPPY|;|GOLDEN 12|;|
Поскольку «HE. ? 2» имеет 2 в конце, я не хочу никакого результата.Единственная причина, по которой есть результат, заключается в том, что ". ?"соответствует всему как раз перед 2. Я хочу ". *?"включить все, чтобы я мог сопоставить что-то вроде этого:
"GOTHIC PEOPLE WAS HERE LAST NIGHT TILL 2"
, но НЕ включать "|; |"символы в этом поиске