2016-05-24 2 views
0

Это не столько о том, как добиться того, что объяснено в этом примере, но и есть множество простых способов сделать это. Вопрос в том, ПОЧЕМУ, что пример не ведет себя так, как ожидалось?Как работает группа не-захвата JS regex?

1. Если у меня есть следующая строка

"#foo#bar"

2. И я пытаюсь получить [foo, bar] со следующим регулярным выражением в JavaScript

"#foo#bar".match(/(?:#)([a-zA-Z]*)/gi)

3. Он возвращает

Array [ "#foo", "#bar" ]

Игнорирование, не захватив группу (?:#)

Он работает, как я первый ожидаемый здесь https://regex101.com/r/zI0wH9/1

Так почему же это? Являются ли регулярные выражения JS как-то иначе?

+0

Вам просто нужно получить доступ к 1-й группе значение –

+0

Как если 'match' только возвращает массив? – nardeas

+0

Используйте 'RegExp # exec' в цикле и собирайте' match [1] 'в пользовательский массив/список/независимо. В regex101 вы можете захватить JS-код со страницы * code generator * и внести поправку в соответствии с вашими потребностями (см. Комментарии там для руководства). –

ответ

0

просто попробовать

"#foo#bar".match(/[a-zA-Z]+/gi); //outputs ["foo", "bar"] 
+0

Да, но ПОЧЕМУ не работает выше/работает по-разному в JS vs. regex101? – nardeas

+1

Он не отличается от regex101. Вы получаете одинаковые совпадения, но панель 'MATCH INFORMATION' отображает только зарегистрированные значения группы от ID1 до ID * n ***. Вина regex101 для запутанной терминологии. –

Смежные вопросы