Строковый массив регулярных выражений - исключая шаблон разделителя - PullRequest
2 голосов
/ 06 марта 2019

вот мой вариант использования.У меня есть список слов или фраз, и мне нужно, чтобы они были в массиве строк, но строка может содержать что-либо в строке.Поэтому я просто придумал очень маловероятный разделитель.Таким образом, пользователь может искать фразы несколькими способами, одна из которых - поиск по шаблону.

, скажем, пользователь ищет "* * 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"

, но НЕ включать "|; |"символы в этом поиске

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...