Страницы

Поиск по вопросам

четверг, 6 июня 2019 г.

Регулярка на js “не искать внутри кавычек, но все выражение в кавычках - да”

Всем доброго дня! В общем, нужно найти все слова (буквы и цифры), перед которыми стоит знак минус. Трудность в том, что если это находится где-то внутри кавычек - то искать не надо. Примеры. -словоКотороеНайдет этоеНет -этоСноваНадет -"этоНайдет полностью и меня и меня" "-аВот я ненужен" -аЯНужен "и я -неНужен"


Ответ

Вот что получилось
/(^|[\s
])-(([^\s"'][^"']*?)(?=\s)|(["'])([^\s"'][^"']*?)\4)/g
Это не сработает
"например -"для вот такой конструкции"" "для -этого слова"
Перед выражением должен бы пробел, перевод строки или начало текста, а кавычки должны стоять прямо перед и сразу после текста. Это необходимое условие,иначе выражение, оказавшееся между двумя выражениями в кавычках, тоже будет пропускаться. По этой же причине нельзя отследить второе исключение из списка выше:
@eicto, да, это пропустит, вы правы. Но отслеживать кавычки обрамлённые пробелами бессмысленно, потому как такая форма проверки отсеит и текст не заключённый в кавычки, а находящийся между двумя фразами в кавычках, потому остаётся предполагать, что кавычки стоят прямо перед текстом, или сразу после него. Так же пропустит "вот -это слово", так как ни одна кавычка не стоит рядом с ним. Если же сделать проверку на наличие кавычек более дотошной, учитывающей такой вариант, то она отсеит -это "слово".
Выражение проверяет как двойные, так и одинарные кавычки.
Для более тщательной проверки стоит использовать несколько последовательных обработок текста, как советует @VenZell.

Комментариев нет:

Отправить комментарий