Regex Не захватывающая группа при использовании ИЛИ (|) - PullRequest
0 голосов
/ 22 февраля 2019

Что у меня есть:

Я сделал это регулярное выражение /(\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)"))(?:\.includes\("?)([^"]*)(?:"?\))/g

И я хочу соответствовать [123].includes("Oi") == "asdasd" && "asdw".includes("w")

Но в группах захвата я хочу получитьмассив [123] или строка, но без кавычек asdasd.

Я искал, как использовать группы без захвата, и увидел это (?:<CONTEXT>(<WHAT_YOU_NEED_TO_GET>)<CONTEXT>), поэтому я сделал свое регулярное выражение таким образом, но когдаЯ использую ИЛИ (|), это не работает.

Во втором матче я получаю следующие группы захвата:

0: ""asdw".includes("w")"
1: ""asdw""
2: "asdw"
3: "w"

Но я хочу получить следующее:

0: ""asdw".includes("w")"
1: "asdw"
2: "w"

Отметьте Здесь , чтобы лучше увидеть группы захвата

1 Ответ

0 голосов
/ 22 февраля 2019

Добавление их в качестве ответа.

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

Замена (\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)")) на (?:\"([^"]*)\"|(\[[^\]]*\])) должна выполнить работу.

Демо .

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