0

注意下面的代码

async function handleRequest(req) {
  const res = await fetch(req)
  return rewriter.transform(res)
}

 class AttributeRewriter {
  constructor(attributeName) {
    this.attributeName = attributeName
  }

  element(element) {
    const attribute = element.getAttribute(this.attributeName)
    if (attribute) {
      element.setAttribute(
        this.attributeName,
        attribute.replace('/product/', '/p-'),

      )
    }
  }
}

const rewriter = new HTMLRewriter()
  .on('a', new AttributeRewriter('href'))
  .on('link', new AttributeRewriter('href'))



addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

此代码工作正常说明:我将用此代码替换/product//p-现在我将用b.comstatic.a.com替换这些a.com值与cdn.b.com 我'将在这段代码中全部替换它们

4

1 回答 1

0

我相信我理解问题是您想对所有和元素的 href 属性进行多个字符串替换。具体来说,您希望将 /product/ 替换为 /p,并且还希望将 a.com 替换为 b.com,将 static.a.com 替换为 cdn.b.com。

如果是这种情况,那么一种简单的方法是为您想要进行的每个替换链接额外的 .replace() 调用。例如,这样的事情可能会起作用:

element.setAttribute(
  this.attributeName,
  attribute
    .replace('/product/', '/p-')
    .replace('//a.com/', '//b.com/')
    .replace('//static.a.com/', '//cdn.b.com/')
)

使用此代码,href="http://a.com/product/name" 将替换为 href="http://b.com/p-name"。

我希望这有帮助! https://community.cloudflare.com/t/multiple-replacement/152668/2

于 2020-03-03T07:20:02.680 回答