Я разрабатываю блог рендеринга на стороне сервера с помощью Nuxt.js, я хочу добавить AMP-версию этого сайта.Если URL обычной страницы https://example.com/blog/internal-link
, версия AMP будет https://example.com/amp/blog/internal-link
.
. Я должен добавить префикс /amp
для всей внутренней ссылки, прежде чем она отправит клиенту, если кто-то откроет AMP.версия.
У меня есть это регулярное выражение <a([^>]*?)href\s*=\s*(['"])([^\2]*?)\2\1*>
для извлечения href-значения тега привязки.
Затем я придумал этот скрипт:
const regex = /<a([^>]*?)href\s*=\s*(['"])([^\2]*?)\2\1*>/gi;
const str = `<a href="/blog/internal-link" aria-label="Internal Link" class="blog__link">`;
const subst = `<a href="/amp$3>`;
const result = str.replace(regex, subst);
console.log(result);
Но приведенное выше регулярное выражение извлекает все значение href, включая внешнюю и внутреннюю ссылку.Как сделать так, чтобы RegEx соответствовал только внутренней ссылке, предположим, что внутренняя ссылка всегда выглядит так /blog/internal-link
?
Итак, исходя из этого сценария, входные и ожидаемые выходные данные должны быть такими:
Вход: <a href="/blog/internal-link" aria-label="Internal Link" class="blog__link">
Выход: <a href="/amp/blog/internal-link" aria-label="Internal Link" class="blog__link">
Вход: <a href="https://example.com/blog/internal-link" aria-label="Internal Link" class="blog__link">
Выход: <a href="https://example.com/blog/internal-link" aria-label="Internal Link" class="blog__link">
ОБНОВЛЕНИЕ
Спасибо за помощь в решении этой проблемы.Я заканчиваю тем, что использую этот RegEx <a([^>]*?)href\s*=\s*(['"])(\/[^\2]*?)\2\1*>
.Мне нужно только добавить \/
перед [^2]*?
, чтобы отфильтровать внутреннюю ссылку.
Вот минимальное воспроизведение с окончательным результатом для моей задачи:
const html = `
<html>
<head>
<title>Hello World</title>
</head>
<body>
<a href="/blog/internal-link" aria-label="Internal Link" class="blog__link">Internal Link</a>
<a href="https://example.com/blog/external-link" aria-label="External Link" class="blog__link">External Link</a>
</body>
</html>`
const regex = /<a([^>]*?)href\s*=\s*(['"])(\/[^\2]*?)\2\1*>/gi;
const result = html.replace(regex, `<a href="/amp$3">`);
console.log(result)