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