«Изучение JavaScript» Глава 17: Регулярные выражения ... Примеры обратных ссылок не выполняются [дубликат]

В настоящее время я читаю «Изучение JavaScript» Итана Брауна (2016). Я просматриваю примеры в разделе Backreferences, и они продолжают появляться как «null». Есть два примера.

Пример 1: полосы : XAAX , имена GOOG, которые следуют шаблону XYYX.

//we use backticks here because we're using single and 
//double quotation marks:
const html = `<img alt='A "simple" example,'>` +
`<img alt="Don't abuse it!">`;
const matches = html.match(/<img alt=(?:['"]).*?1/g);
console.log('matches: '+ matches);//output was null

Если я правильно понял текст, результат должен быть ...

(?:['"])

Пример 2: Совмещение одиночных и / или двойных кавычек.

?:

Опять же, если я правильно понял текст, результат не должен быть «null». В тексте точно не указано, каким должен быть результат.

Я в затруднении, пытаясь понять, почему, когда я запускаю это в Node.js, он продолжает давать мне «нуль» для этих двух примеров. У кого-нибудь есть понимание?

javascript,node.js,regex,null,backreference,

0

Ответов: 2


2

Проблема в том, что ваша группа

match

?:указывает , что это не-отлов группа - это означает , что вы не можете обратной ссылки на группу (или получить группу в вашем matchрезультата). Вместо этого используйте скобки, чтобы указать, что группа должна быть захвачена:

const html = `<img alt='A "simple" example,'>` +
`<img alt="Don't abuse it!">`;
const matches = html.match(/<img alt=(['"]).*?1/g);
console.log('matches: '+ matches);


0

Похоже на ошибку в книге.

  1. Регулярное выражение в фрагментах кода использует группы, не связанные с захватом: что представляет собой группа, не участвующая в захвате? Что делает (? :)?

Они не пригодны для обратных ссылок. Вместо этого используйте обычные скобки:

const promo = "Opening for XAAX is the dynamic GOOG!  At the box office now!";
const bands = promo.match(/([A-Z])([A-Z])21/g);
console.log('bands: '+ bands);//output was null

То же самое касается других образцов ...

Обновление : я проверил исходный источник (3-е издание) и могу подтвердить: все образцы ошибочны и используют группы, не связанные с захватом.

Кстати: автор пишет:

Группировка позволяет использовать другой метод, называемый обратными ссылками. По моему опыту, это одна из наименее используемых функций регулярного выражения, но есть один случай, когда это пригодится. ...

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

Затем следует образец регулярного выражения HTML, показанный в OP. Ктулху звонит?

JavaScript, Node.js, регулярное выражение, пустой, обратная ссылка,
Похожие вопросы