У меня есть следующие примеры строк:
"1. go [south], but look out for the trout pouting [lout]"
"2. go [south], but be wary of the pouting [lout]"
"3. go [south], but be wary of the sullen-looking [lout]"
Я хотел бы, чтобы слово запроса совпало , если оно появляется в каждой строке, но игнорируется, если оно находится между скобками. Поэтому я ищу, чтобы соответствовать:
Мне удалось дойти до этого выражения:
/[^\(\)\[\]]out\s(?![\]])/ig
Тем не менее, это только соответствие первой строки для отказа и форелей.
Я понял, что символ пробела является влияющим фактором здесь, поскольку он не подходит для надувания, но избавление от него также соответствует всему, что находится между скобками.
Каким будет правильное регулярное выражение для этого?
Предполагая, что [...]
сбалансированы и не привязаны, вы можете использовать отрицательный поиск на основе поиска:
/out(?![^\[\]]*\])/
(?![^\[\]]*\])
Является отрицательным опережением, который утверждает, что мы не имеем ]
следующий non- [
и non- ]
символы вперед, таким образом, убедившись, что мы не соответствующими out
внутри a [...]
.
Код Javascript для создания вашего регулярного выражения:
search = "out";
var regex = new RexExp(search + "(?![^\\[\\]]*\\])", "g");