XRegExp: "Непревзойденный") "Все же все кажется сбалансированным

Я написал следующую строку кода:

XRegExp.exec(data,
    XRegExp('<!-- @\[(?<component>[\w+])[\(*(?<classes>[\w+])*\)]*\] -->', 'g'))

Как вы можете видеть, он использует библиотеку XRegExp, поэтому я могу использовать именованные группы и другие функции PCRE.

Я получаю ошибку:

syntaxError: Invalid regular expression: /<!-- @[(?<component>[w+])[(*(?<classes>[w+])*)]*] -->/: Unmatched ')'

Тем не менее, я не понимаю, где непревзойденный ) является. Насколько я могу судить, все скобки, которые нужно экранировать, должны быть, а все те, которые не должны, - нет.

Вот строка, которую я пытаюсь найти:

<!-- @[NoteBlock(warning)] -->

они также должны соответствовать:

<!-- @[NoteBlock(warning, high-level)] -->

<!-- @[NoteBlock] -->

Это не должно совпадать:

<!-- @[(warning, high-level)] -->

UDPATE: с помощью Regex101 мне удалось получить регулярное выражение: я обновил регулярное выражение до '<!-- @\[(?<component>[\w+]+)\(*(?<classes>[\w+]+)*\)*\] -->' однако я все еще получаю ту же ошибку.

1 ответ

Решение

Я обновил свой ответ, чтобы соответствовать новой предоставленной информации.

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

Следующее будет сопоставлять любые символы между [(для компонента и что-либо между () для классов).

\ w соответствует слову, цифре или подчеркиванию. Это бы пропустило ваши [-,] символы

Надеюсь, это поможет.

<!-- @\[(?<component>[\w]*)\((?<classes>.*?)\)*\] -->

@ [Компонент (Классы - предупреждение, высокий уровень)]

Другие вопросы по тегам