Давайте следующий (немного сложно) регулярное выражение в JavaScript:JavaScript регулярное выражение неожиданное поведение
\{\{\s*(?:(?:\:)([\w\$]+))?\#(?:([\w\$\/][email protected]?)?([\s\S]*?))?(\.([\w\$\/]*))?\s*\}\}
Я задаюсь вопросом, почему это соответствует вся строка здесь:
{{:control#}}x{{*>*}}
, но не в в следующем случае (где после #
) заполняется пробел:
{{:control# }}x{{*>*}}
В PHP или Python, он соответствует в обоих случаях только первой части {{: ... }}
.
Я хочу, чтобы JavaScript соответствовал только первой части. Возможно ли без взлома (?!}})
до [\s\S]
?
Кроме того, является ли производительность причиной этого различного поведения в JavaScript или это просто ошибка в спецификации?
Почему это работает на PHP, Python или .NET без '?'? –
Нет, '?' - жадный квантификатор на всех языках, я добавил более подробные ответы. –