Вы не указали, какой тип регулярного выражения вы используете, но это
работать в любом из самых популярных, которые можно считать «завершенными».
/.+?(?=abc)/
Как это работает
Часть .+?
является не жадной версией .+
(одна или несколько
что-нибудь). Когда мы используем .+
, двигатель будет в основном соответствовать всем.
Затем, если в регулярном выражении есть что-то еще, оно будет возвращаться пошагово
пытаясь сопоставить следующую часть. Это жадное поведение,
значение максимально удовлетворить .
При использовании .+?
вместо сопоставления всех сразу и возврата к
другие условия (если есть), двигатель будет соответствовать следующим символам
шаг до следующей части регулярного выражения (снова, если таковые имеются).
Это не жадный , что означает соответствие наименьшему возможному
удовлетворяют .
/.+X/ ~ "abcXabcXabcX" /.+/ ~ "abcXabcXabcX"
^^^^^^^^^^^^ ^^^^^^^^^^^^
/.+?X/ ~ "abcXabcXabcX" /.+?/ ~ "abcXabcXabcX"
^^^^ ^
После этого имеем (?=
{contents}
)
, нулевой ширины
утверждение , оглядывается . Эта сгруппированная конструкция соответствует
содержимое, но не считается совпадением символов ( нулевая ширина ). Это
возвращается только в случае совпадения или нет ( утверждение ).
Таким образом, другими словами, регулярное выражение /.+?(?=abc)/
означает:
Подбирайте как можно меньше символов, пока не найдете "abc",
не считая "abc".