Почему мое регулярное выражение работает на PHP, но не на JavaScript?

У меня есть созданное мной регулярное выражение, которое я сейчас использую в PHP. Хотя, когда я сливаю его на JavaScript, он отказывается работать. Я также пробовал его в Python, и он отлично работает.

Regex:

@[[](.[^]]+)[]][()](\d+)[)]

Тестирование на PHP и работающий

Тестирование в JavaScript и не работает

Ответы

Ответ 1

JavaScript автоматически не удаляет ваш ].

Это поможет вам получить визуальную идею:

PCRE:

PCRE

JS:

JS

Python:

Python

Итак, чтобы исправить это, вам нужно избежать скобок

@[[](.[^\]]+)[\]][()](\d+)[)]
//      ^     ^  

Лучший способ написать это регулярное выражение - минимизировать использование классов символов:

@\[(.[^\]]+)\][()](\d+)\)

Вот почему это хорошая практика, чтобы избежать этого, вместо того, чтобы полагаться на причуды аромата.

Я сгенерировал эти изображения через regex101.