Что я пытаюсь сделать, если строка состоит из некоторой подстроки, которая начинается с "!" заключенный в "[" и "]", чтобы отделить эти скобки от остальной части строки через пробел, например "[! foo]" -> "[! foo]", "[! bar]" -> "[! bar]", et c. Поскольку эта подстрока может иметь переменную длину, я решил, что это должно быть сделано с помощью регулярного выражения. Я думал сделать это в два шага - сначала отделить первую скобку, затем отделить вторую скобку.
Первая не сложная; регулярное выражение просто \[!
, и поэтому я могу просто сделать str = str.replace(/\[!/g, "[ !");
в Javascript. Это вторая часть, которую я не могу заставить работать.
Потому что теперь мне нужно сопоставить "]", если строковый литерал "[!" находится в любом месте перед ним. Так что простой положительный взгляд назад не совпадает, потому что он только смотрит прямо сзади: (?<=\Q[ !\E)\]
не совпадает.
И я до сих пор не понимаю, почему, но я не разрешено делать позитивный взгляд за нефиксированной длиной; (?<=\Q[ !\E.*)\]
выдает ошибку Syntax Error: Invalid regular expression: missing /
в консоли, а этот отладчик регулярных выражений выдает ошибку шаблона, объясняющую, что "квантификатор внутри взгляда делает его нефиксированной ширины".
Установка не захватившая группа с нефиксированной шириной между обзорным изображением и группой захвата не работает; (?<=\Q[ !\E)(?:.*)\]
не совпадает.
Одна вещь, которая не работает, это просто попытка сопоставить "[!" в начале строки, потому что вся эта строка «[! foo]» на самом деле сама подстрока еще большей строки и не находится в начале.
Что я отсутствует