У меня есть такая строка:
This is very sad, and this is [very sad] and [test;very sad]
Что мне нужно, так это регулярное выражение, которое будет фиксировать «очень грустно», только если оно не заключено в квадратные скобки. Я пробовал примерно так:
[^\[](very sad)[^\]]
Но это, похоже, не работает, если в начале строки стоит «очень грустно», а когда это происходит - захватываются лишние пробелы вокруг строки, как это можно увидеть здесь:
@ WiktorStribiżew или very sad(?![^[]*])
@ RokoC.Buljan Да, в любом случае, я не могу найти точный дубликат. Решение - просто сопоставить все, что находится в квадратных скобках, а затем сопоставить то, что нужно OP в других контекстах. /\[[^\][]*]|(very sad)/g
, а затем используйте некоторый код для применения необходимых изменений.
или см. Регулярное выражение для соответствия символу, но не в квадратных скобках
@ WiktorStribiżew Спасибо, ваш ответ, а также ответ RokoC.Buljan, похоже, работают, но если не возражаете, я спрашиваю - эквивалентны ли они? Глядя на regexp101, я, кажется, не понимаю разницы ...
Они не эквивалентны. Но подойдет для этого конкретного случая.
Обычное решение -
very sad(?![^\][]*])
.